티스토리 뷰
반응형
Memory Access
- 프로그램은 실행되기 위해서 반드시 메모리에 로드되어야 한다.
- CPU는 오로지 레지스터와 메인 메모리에만 접근할 수 있다.
- 메모리 유닛은 메모리 주소들의 흐름만 볼 수 있다.
- context oblivious
- 메모리 주소만 알고 메모리에 대한 어떤 것도 모른다.
- context oblivious
- Memory Protection Mechanism
Address Binding
- 현대의 운영체제는 프로세스가 물리 메모리의 어떤 부분에도 상주할 수 있도록 한다.
- 컴파일러는 symbolic address를 relocatable address(= relative address)로 bind 한다.
- 링커와 로더는 relocatable address를 absolute address로 bind 한다.
Address Binding Time
- Compile time: 만약 메모리 주소가 연역적인 것으로 알려지면, absolute code가 생성된다; 메모리 주소의 변경이 일어나면 반드시 코드를 다시 컴파일해야 한다. 현재는 거의 쓰이지 않는다.
- Load time: 메모리 주소가 compile time에 알려지지 않았으면 반드시 relocatable code를 생성해야 한다.
- Execution time: 만약 프로세스가 실행되는 동안 한 개의 메모리 구역에서 다른 구역으로 옮겨갈 수 있다면, 바인딩은 런타임까지 늦춰진다.
Logical vs. Physical Address Space
- Physical address는 메모리 유닛에게 보여진다.
- Logical address는 CPU에 의해서 생성된다.
- compile time과 load time 바인딩 시에는 physical address와 logical address는 같은 주소를 가리킨다.
- 항상 같은 Physical address를 바인딩한다.
- Execution time 바인딩 시에는 다르다.
Memory Management Unit (MMU)
Virtual address를 Physical Address로 매핑하는 하드웨어 장치
- 프로그램은 절대로 physical address를 볼 수 없다.
- 프로그램은 오로지 logical address 관점에서만 동작한다.
- 최종 physical address는 메모리에 접근될 때만 결정된다.
int a[10];
int *b;
b = a;
b = b + 4;
b = &b
위의 예에서, 5번째 줄에서 referencing을 할 때 메모리의 물리적 주소가 결정된다.
Dynamic Linking
Dynamic Linking: Execution time에 object 모듈을 연결하는 것
- Static vs. dynamic linking
- Static linking: 로더에 의해서 시스템 라이브러리들이 바이너리 프로그램으로 결합된다.
- Dynamic Linking: Linking이 execution time까지 미뤄진다.
- Dynamic Linking
- 프로그램 내에서 라이브러리를 호출하는 곳마다 stub이라는 작은 코드 조각이 생성된다.
- stub은 메모리 주소를 찾는 방법 또는 라이브러리를 메모리에 적재하는 법을 알고 있다.
- 라이브러리 버전을 업데이트할 때, static linking과 다르게 모든 프로그램을 재 컴파일할 필요가 없다.
- 운영체제의 도움이 필요하다.
Dynamic Linking을 사용하는 이유: 라이브러리 전체를 메모리에 복사하는 것보다는 프로그램 간의 중복된 라이브러리를 줄이기 위해
Swapping
프로세스를 실행하기 위해 필요한 메모리 공간이 물리 메모리의 용량을 넘어섰을 경우, swapping을 사용할 수 있다.
- Swapping
- 메모리의 프로세스를 일시적으로 디스크로 옮기거나, 디스크로부터 읽어오는 기술 (예: Round-Robin CPU 스케줄러)
Contiguous Memory Allocation (연속 메모리 할당)
Multiple partition allocation
- Fixed-sized partitions: batch 환경에서 주로 사용됨. 한 개의 파티션에 한 개의 프로세스가 위치한다. 더 이상 사용되지 않는 방법이다.
- Variable partition size: 메모리의 어떤 부분이 사용 가능/불가능 한 지 나타내는 테이블을 사용한다.
- Hole: 사용 가능한 메모리 블록, 메모리 전체에 걸쳐서 흩어져있다. 프로세스가 메모리에 도착하면, 운영체제는 프로세스를 실행하기 위해 충분히 큰 블록을 찾는다.
- 사이즈 n의 요청을 어떻게 만족하지?
- First Fit: 프로세스를 실행하기 위해 충분히 큰 hole 중, 가장 첫 번째 hole을 할당시킨다.
- Best Fit: 프로세스를 실행하기 위해 충분히 큰 hole 중, 가장 작은 hole을 할당시킨다.
- Worst Fit: 가장 큰 hole을 할당시킨다.
- 보통 first fit과 best fit이 worst fit보다 더 나은 성능을 가진다.
반응형
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
[운영체제] 가상 메모리 관리 (2) | 2020.02.02 |
---|---|
[운영체제] 메모리 관리 (2) (0) | 2020.01.24 |
[운영체제] 동기화 (2) (0) | 2020.01.14 |
[운영체제] 동기화 (1) (0) | 2020.01.10 |
[운영체제] 데드락 (0) | 2019.10.30 |
댓글
링크
공지사항
최근에 달린 댓글
- Total
- Today
- Yesterday