레지스터 ,캐시 -> HW관리(CPU)
메인 메모리, 보조기억장치 -> SW관리 (OS)
Block : 보조기억장치와 주기억장치 사이의 데이터 전송 단위 (1~4KB)
Word : 레지스터와 주기억장치 사이의 데이터 전송 단위 (16~64bits) <64bit, 32bit 컴퓨터는 word와도 같음)
<Address Binding>
Address Binding : 프로그램의 논리 주소를 물리 주소로 매핑
Compile time binding : compile time에 binding 하는 것 (실행 파일 만들 때 결정)(초기 컴퓨터)
Load time binding : Load time에 binding 하는것 (상대주소로 저장해놓고 메모리에 올릴 때 결정 ,+시작 주소)
Run time binding : Run time 에 binding 하는 것 (ready -> running 마다 주소 재설정) (명령어 실행 순간 결정)
(대부분의 OS가 사용)
Fragmentation (단편화) -> 낭비되는 메모리
- 내부 단편화 : pratition 크기 > process크기
- 외부 단편화 : 남은 메모리 크기 > process크기
<Memory Allocation>
Continous Memory Allocation (연속 할당) -> 하나의 process를 떨어뜨리지 않고 연속해서 올림
- Fixed partition (FPM) : 메모리를 미리 고정된 크기로 분할 -> Internal/external fragmentation 이 발생 , 메모리 낭비
- Variable partition (VPM) : 메모리를 요청하면 유동적으로 분할
- external fragmentation 발생 -> Coalescing holes (공간 통합) -> 오버헤드 작음
-> Storage Compaction (메모리 압축) -> 오버헤드 큼
(지금은 임베디드같은거 제외한 대부분 전부 Virtual Memory 사용)
Non-continuous allocation (비연속 할당) -> 가상메모리(Virtual Memory) 사용
- Paging system : 프로그램을 같은 크기의 블록을 분할, 메모리도 page frame으로 분할 (window, linux 사용 중)
(page sharing 가능, segmentation system보다는 복잡)
Page Map Table(PMT) -> 프로세스마다 존재, 커널에 저장 됨, 메모리 접근 횟수 2배
TLB -> PMT를 적재하여 효율 증가, (하드웨어적)병렬 탐색, 캐시 처럼 이용하여 효율 증가
(비싸서 TLB(MMU)를 캐시로만 이용) (TLB가 있어야 가상메모리 가능)
- Segmentation system : 논리적 분할 (논리적 분할이라 공유 및 보호 과정 편함),
VPM처럼 메모리를 미리 분할 하지 않음.
paging system에 비해 overhead가 큼
Segment Map Table (SMT) , TLB 마찬가지
- Hybrid paging/segmentation system :
논리 단위의 segment로 분할하고 각 segment를 고정된 크기의 page들로 분할
각 프로세스 마다 하나의 SMT , 각 segment마다 하나의 PMT
두가지 장점 혼합 : page sharing/protection 용이, 메모리 할당/관리 overhead 작음
단점 : 메모리 소모 큼, address mapping 복잡
일반적으로 컴퓨터는 paging은 100%사용한다. 그리고 때에 따라 segmentation은 부가적으로 같이 사용
<부가 설명>
Direct mapping : PMT를 main memory에 적재
Associative mapping : PMT 를 TLB에 적재
Hybrid Direct / Associative Mapping : PMT중 일부 entry들을 TLB에 적재
static linking -> exe파일 생성할 때 lib같은거 미리 다 linking 해서 생성
dynamic linking -> 실행될 때 linking 해주면 exe끼리 중복 제거 (ex - printf ,scanf)
메모리에서 디스크로 출력, 디스크에서 메모리로 로드 -> I/O 해당
<paging 부가설명>
Demand fetch(demand paging) : 프로세스가 참조하는 페이지들만 적재
update bit = duty bit
Thrashing(스레싱) 현상 : 과도한 page fault가 발생하는 현상
***page 교체 기법
<Fixed allocation>
-MIN algorithm : 가장 나중에 참조될 page를 교체
- 최적의 알고리즘이지만 현실 불가능
-LRU(Least Recently Used) Algorithm : 가장 오랫동안 참조되지 않은 page를 교체(Locality 활용)
- paging 교체기법 중 가장 많이 활용됨
- MIN algorithm에 근접한 성능을 보여줌
단점 : loop실행에 필요한 크기보다 작은 수의 page frame이 할당 된 경우, page fault 급격히 증가
-LFU(Least Frequently Used)
-NUR(Not Used Recently)
<Variable allocation>
PFF(Page Fault Frequency) : page fault 빈도 높으면 메모리 증가 , page fault 빈도 낮으면 감소
page size 는 적당한 것보다 조금 큰게 좋을 수있음 -> 발전 경향으로 보면 최적의 page size가 커지고 있음
(전체 메모리가 커지고 있고,
cpu 속도도 빨리 증가중->disk와의 gap이 커짐)
'CS(Computer Science) > 운영 체제' 카테고리의 다른 글
프로세스 (Process) (0) | 2020.09.17 |
---|---|
(시작 전에) 운영 체제 기본 (0) | 2020.09.16 |