Main memory
- 프로세스의 메모리 공간 보호
- base register & limit register
- BR <= 프로세스가 접근할 수 있는 공간 <= BR + LR
- Address binding : 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑
- Compile time
- Load time
- Execution time
- 프로세스가 메모리에 올라간 이후
- Dynamic Loading : 프로그램의 모든 모듈을 올리지 않고 필요하면 올려주는 방식
- Dynamic Linking : 프로세스 실행 시 같은 라이브러리가 메모리에 올라가는 것을 방지
- 라이브러리 최초 필요시 해당 라이브러리의 메모리 공간 확보
- 다른 프로세스가 해당 라이브러리를 필요할 경우 stub 포인트로 참조
- Swapping : 메모리의 올라간 프로세스를 잠시 디스크에 저장했다가 다시 올리는 방식
- 메모리 공간이 부족시 사용
- swap-in : 메모리에 다시 할당되는 것, swap-out : 디스크로 빠지게되는 것
연속 메모리 할당
- multiple-partition allocation : hole이 생길때까지 잠시 대기
- hole 탐색하는 방법
- First-fit : 찾으면 일단 넣음
- Best-fit : 있는 것 중 제일 작은 것에 넣음 (효율성 중시)
- Worst-fit : 제일 넉넉한 것에 넣음
- Fragmentation
- External fragmentation : 프로세스를 넣을 남은 메모리가 충분하지만, 연속되지 않음
- compaction을 통한 해결 but overhead가 크고 압축 과정에서 또 frag를 생성함
- Internal fragmentation : partition(할당된 메모리)의 크기가 프로세스보다 큼
- External fragmentation : 프로세스를 넣을 남은 메모리가 충분하지만, 연속되지 않음
불연속 메모리 할당 - Paging
물리적 메모리를 고정된 크기의 블록으로 나눔 -> frames
논리적 메모리를 고정된 크기의 블록으로 나눔 -> pages
page table을 이용해 page와 frame을 매핑
Internal fragmentation 문제
TLB를 통해 page table 접근을 빠르게
- CPU가 TLB에 먼저 접근하여 page address를 확인
- 있으면 바로 물리 주소에 접근
- 없으면 page table에 접근
Memory protection
- 연속 할당에서는 base/limit register를 통해 프로세스 메모리 보호
- 불연속 할당에서는 page table에 protection bit을 이용 (valid-invalid)
Shared pages
- Shared code (I/O 프로세스 등)
- Private code and data
Page Table 구조
page table도 큰 연속적인 메모리가 되어서 page table을 나누고 접근하는 방법
- Hierarchical page table
- Two-levle page Table
- 64bit에는 부적합
- Hashed page table
- 해시 함수를 통해 테이블에 바로 접근하여 물리주소를 찾음
- 해시 테이블에 접근 후엔 chaining 방식으로
- Inverted page table
- 페이지 주소(논리) -> 프레임 주소(물리) 가 아닌 프레임 주소를 기준으로 테이블을 할당
- 메모리 활용 효율성이 좋지만, 테이블 탐색 시간이 오래걸릴 수 있음
'컴퓨터과학 > 운영체제' 카테고리의 다른 글
[운영체제] 가상 메모리 (Virtual memory) (0) | 2021.01.22 |
---|---|
[운영체제] 교착상태 (Deadlocks) (0) | 2021.01.20 |
[운영체제] 동기화 (Synchronization) (0) | 2021.01.19 |
[운영체제] 스케줄링 (Scheduling) (0) | 2021.01.18 |
댓글