메모리(기억장치)의 종류
메모리(기억장치) 계층구조
block
- 디스크에서 메모리에 최소로 이동할 수 있는 단위
- 보조기억장치와 주기억장치 사이의 데이터 전송 단위
- size: 1~4KB
Word
- 주기억장치와 레지스터 사이의 데이터 전송 단위
- size: 16~64bits (메모리에서 데이터를 64bits씩 읽는다)
- 레지스터의 크기가 word의 크기만큼 되어있다. => CPU가 몇 bit인지를 판단하는 기준이 된다.
Address Binding
프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑(mapping)하는 작업
(컴퓨터 공간안에 정수형int를 선언할 때는 변수크기만큼 크기를 잡는것이다. 메모리상에서 이를 보면 주소1000번~1003번까지 저장한다. 논리주소 a와 물리주소 1000과 묶는 작업이 필요함???)
Binding 시점에 따른 구분 (언제 mapping하는지..)
- Compile time binding
- Load time binding
- Run time binding
User Program Processing Steps
- 컴파일 순간에 이루어지는 binding => compile time binding
- 오브젝트 모듈을 Loadmodule(.exe)로 만들고 exe를 클릭해서 실행하면 메모리에 올라감 => Load time binding
- 로더를 통해서 프로세스가 메모리에 올라가면 메모리에서 실행되는 중 주소를 정해주는 것 => Run time binding
Compile time binding
- 컴파일 할 때 주소를 정해주는 것
- 컴파일러가 주소를 직접 지정하려면 메모리를 완벽하게 이해하여야 한다. (한계점)
- 프로세스가 메모리에 적재될 위치를 컴파일러가 알 수 있는 경우 (위치가 변하지 않음)
- 프로그램 전체가 메모리에 올라가야 함
Load time binding
- 메모리 적재 위치를 컴파일 시점에서 모르면, 대체 가능한 상대 주소를 생성한다.
- 적재 시점(Load time)에 시작 주소를 반영하여 사용자 코드 상의 주소를 재설정한다.
- 프로그램 전체가 메모리에 올라가야 함.
- 컴파일러는 0번에서 시작한다고 가정하고 주소를 할당한다. (branch 360, load 1204를 읽어라)
- 실제로 메모리에 프로그램을 올렸더니 시작 주소가 400
- 할당하려고 하는 주소에 400을 추가
- 올라간 상태의 프로그램은 상대주소를 절대주소로 변환하여 실행한다.
Run time binding (Execution time binding)
- 실제로 수행될 때(프로세스가 ready->running 될 때)
- 프로세스 상태전이에서 ready ->run -> asleep -> ready 를 반복하는데 프로세스가 수행도중 다른 메모리 위치로 이동할 수 있음
- HW의 도움이 필요 (MMU: Memory Management Unit)
- 대부분 OS가 사용
Dynamic Loading
address binding을 다룰 때 프로그램이 메모리에 통으로 올라가는 경우로 가정하였는데 메모리가 작거나 프로그램의 크기가 커서 다 못올리는 경우가 발생한다.
또한 프로그램의 일부분만 사용할 것인데 전체를 굳이 올려야 할까 라는 의문이 든다. 일부분만 메모리에 올리는 방법을 생각할 것이다. => Dynamic Loading
- 모든 루틴을 교체 가능한 형태로 디스크로 저장 (Func A, B, C 가 있다면 디스크에 저장해 두었다가 프로세스가 각 함수를 호출하면 메모리에 올리는 형태)
- 실제 호출 전까지는 루틴을 적재하지 않음
- 메인 프로그램만 메모리에 적재하여 수행함
- 루틴 호출 시점에 address binding이 된다.
- 메모리의 공간을 효율적으로 사용할 수 있음.
Swapping
(앞서 프로세스 상태 전이할 때 다루었었다.)
- 프로세서 할당이 끝나고 수행 완료 된 프로세스는 swap-deive로 보내고 (swap-out)
- 새롭게 시작하는 프로세스는 메모리에 적재 (swap-in)
본 포스트는 KOREATECH의 HPC LAB. Duksu Kim 교수님 OS강의를 기반으로 정리한 내용입니다.
상업적 의도가 아닌 공부한 것을 정리해 놓은 목적으로 게시한 포스트입니다.
아래의 출처에서 자세한 내용을 수강하실 수 있습니다.
https://www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN
'CS > OS' 카테고리의 다른 글
[OS] 8. 메모리 관리 - Variable Partition Multi-programming (0) | 2022.04.13 |
---|---|
[OS] 8. 메모리 관리 - Fixed Partition Multi-programming (0) | 2022.04.11 |
[OS] 7. Deadlock - Detection and Recovery (0) | 2022.04.07 |
[OS] 7. Deadlock - Deadlock Avoidance (0) | 2022.04.05 |
[OS] 7. Deadlock - Deadlock Prevention (0) | 2022.04.03 |