[7주차] - 데드락과 메모리 관리
1. DeadLock Avoidance
- 프로세스별로 최대의 자원을 실행시점에 계산해 자원할당 작업 때 데드락 발생가능성이 있다면 자원을 할당하지 않아 DeadLock을 방지한다.
- 시스템의 상태가 원래 상태로 돌아올 수 있는 경우에만 자원을 할당한다
2. Banker's Algorithm
- 가정
- 모든 프로세스는 자원의 최대 사용량을 미리 명시
- 프로세스가 요청 자원을 모두 할당받은 경우 유한 시간 안에 이들 자원을 다시 반납한다
- 방법
- 기본 개념
- 자원 요청 시 safe 상태를 유지할 경우에만 할당
- 총 요청 자원의 수가 가용 자원의 수보다 적은 프로세스를 선택
- 그런 프로세스가 없다면 unsafe 상태
- 그런 프로세스가 있으면 그 프로세스에게 자원을 할당
- 할당받은 프로세스가 종료되면 모든 자원을 반납
- 모든 프로세스가 종료될 때까지 이러한 과정 반복
3. DeadLock Detection and recovery
4. DeadLock Ignorance
5. Logical vs Physical Address
- Logical Address(=virtual address)
- 프로세슴마다 독립적으로 가지는 주소 공간
- 각 프로세스마다 0번지 부터 시작
- cpu가 보는 주소는 logical address임
- Physical address
- 주소 바인딩
6. 주소 바인딩
- 메모리 주소 변환은 운영체제가 아닌 하드웨어가 하는 것이다.
7. Memory Management Unit
- MMU
- logical address를 physical address로 매핑해 주는 Hardware device
- MMU scheme
- 사용자 프로세스가 CPU에서 수행되며 생성해내는 모든 주소값에 대해 base register의 값을 더 한다
- user program
- logical address만을 다룬다
- 실제 physical address를 볼 수 없으며 알 필요가 없다
8. Dynamic Loading
- 프로세스 전체를 메모리에 미리 다 올리는 것이 아니라 해당 루틴이 불려질 때 메모리에 load하는 것
- memory utiliztion의 향상
- 가끔씩 사용되는 많은 양의 코드의 경우 유용
- 운영체제의 특별한 지원 없이 프로그램 자체에서 구현 가능
9. Overlays
- 메모리에 프로세스의 부분 중 실제 필요한 정보만을 올림
- 프로세스의 크기가 메모리보다 클 때 유용
- 운영체제의 지원없이 사용자에 의해 구현
- 작은 공간의 메모리를 사용하던 초창기 시스템에서 수작업으로 프로그래머가 구현
10. Swapping
11. Dynamic Linking
- Linking을 실행시간까지 미루는 기법
- Static linking
- 라이브러리가 프로그램의 실행 파일 코드에 포함됨
- 실행 파일의 크기가 커짐
- 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비
- Dynamic linking
- 라이브러리가 실행 시 연결됨
- 라이브러리 호출 부분에 라이브러리 루틴의 위치를 찾기 위한 stub이라는 작은 코드를 둠
- 라이브러리가 이미 메모리에 있으면 그 루틴의 주소로 가고 없으면 디스크에서 읽어옴
- 운영체제의 도움이 필요
12. Allocation of Physical Memory
- Contiguous Allocation
- 고정분할(Fixed partition) 방식
- 물리적 메모리를 몇 개의 영구적 분할로 나눔
- 분할의 크기가 모두 동일한 방식과 서로 다른 방식이 존재
- 분할당 하나의 프로그램 적재
- 융통성이 없음
- 동시에 메모리에 load되는 프로그램의 수가 고정됨
- 최대 수행 가능 프로그램 크기 제한
- Internal fragmentaion 발생
- compaction
- external fragmentation 문제를 해결하는 한 가지 방법
- 사용 중인 메모리 영역을 한군데로 몰고 hole들을 다른 한 곳으로 몰아 큰 block을 만드는 것
- 매우 비용이 많이 드는 방법
- 최소한의 메모리 이동으로 compaction하는 방법
- compaction은 프로세스의 주소가 실행 시간에 동적으로 재배치 가능한 경우에만 수행될 수 있다
- 가변분할(Variablle partition) 방식
- 프로그램의 크기를 고려해서 할당
- 분할의 크기, 개수가 동적으로 변함
- 기술적 관리 기법 필요
- External fragmentation 발생
본 포스팅은 반효경 교수님의 2017 운영체제 강의를 바탕으로 제작되었습니다.