목차
1강. 운영체제 소개 2강. 프로세스와 쓰레드 3강. 프로세스 스케줄링 //시험범위 4강. 병행 프로세스 I 5강. 병행 프로세스 II 6강. 교착상태 I 7강. 교착상태 II 8강. 메모리 관리 9강. 가상 메모리 10강. 페이지 교체 알고리즘 11강. 장치관리 12강. 저장장치 및 파일 관리 13강. 분산 운영체제 14강. 운영체제 보안 15강. 운영체제 사례
프로세스와 메모리
- 프로세스가 실행되기 위해서는 수행될 명령이 메모리상에 존재해야 한다.
- 프로세스의 동작
- pc (program couter) → 명령어 → CPU로 수행
- 기억장치 계층구조 = 컴퓨터 시스템의 기억장치는 적은 비용으로 높은 성능을 제공하기 위해 계층적으로 구성된다.
- 속도 빠름 ← → 비트당 기억장치 비용이 높음/ →대용량
- CPU 레지스터/캐시 메모리/메모리/보조기억장치
메모리 관리
- 호출
- 배치
- 교체
- 고정/동적분할
- 고정/유동 적재영역
등등
- 단일 프로그래밍
- 하나씩만 실행, 연속 메모리 할당기법
- 문제점
- 메모리 용량 초과하는 프로세스 실행 못함
- 메모리 낭비 심함
- 주변장치의 낭비 심함(하나만 일하고 나머지는 놀고 있다)
- 다중 프로그래밍
- 메모리에 여러 프로세스가 동시에 적재됨
- CPU연산과 입출력을 동시에 함
- CPU 이용도와 시스템 처리량 증가
- 메모리 분할
- 고정분할
- 분할1=25mb/분할2=40mb
- 프로세스 배치 방법
- 1
- 분할영역마다 큐 배치
- 절대 번역(a주소=10, b=14, 절대주소)
- 효율성 낮음
- 2
- 큐 하나만 배치
- 재배치 가능 번역(b주소=a+10, 상대주소)
- 내부 단편화 = 분할 속에 남는 공백이 생김
- 동적분할
- 외부 단편화 = 작은 크기의 공백이 흩어져 생김
- 통합 = 인접된 공백 하나로 묶기
- 집약 = 모든 공백을 하나로 묶기
메모리 보호
- 하한-상한 / 하한-크기 레지스터
메모리 배치기법
- 프로세스를 메모리의 어디에 배치할 것인가 하는 결정과 관련
- 최초 적합= 제일 먼저 발견되는 곳을 할당
- 후속 적합= 이전 탐색이 끝난 부분부터 시작한다
- 최적 적합= 빈 곳 중 가장 작은 공간 선택
- 최악 적합= 빈 곳 중 가장 큰 큰 곳, 작은 자투리를 남기지 않겠다
가상메모리
가상 메모리는 메모리 크기보다 더 큰 기억공간을 사용하는 프로세스를 실행할 수 있다.
프로세스에서 사용되는 가상주소는 동적 주소변환을 통해 메모리의 실주소로 변환된다.
연속적인 가상주소가 실주소 공간에서도 연속적일 필요는 없다.
페이징 기법은 페이지라는 고정된 크기의 블록 단위로 기억장치를 관리하는 기법이다.
세그먼테이션 기법은 모듈화에 따른 논리적 의미에 부합하는 다양한 크기의 세그먼트 단위로 기억장치를 관리하는 기법이다.
요구 페이지 호출기법은 페이지가 필요한 시점에 메모리에 적재하는 방법이다.
예상 페이지 호출기법은 앞으로 사용될 것으로 예상되는 페이지를 미리 메모리에 적재하는 방법이다.
페이지 교체 알고리즘
- 페이지 교체 알고리즘
- 교체 대상 페이지를 어떻게 선택할 것인지 기준에 대해 생각해보자
- 교체 대상 선택
- 최적화의 원칙
- 교체 제외 페이지
- 페이징을 위한 커널 코드 영역
- 보조기억장치 드라이버 영역
- 시간마다 동작하는 코드
- 입출력장치를 위한 데이터 버퍼 영역
- 종류
- FIFO first in first out
- 메모리 상에 가장 오래 있었던 페이지를 선택하여 교체
- 가장 간단하고 오버헤드가 적은 방법
- 가장 많이 쓰이는 페이지를 교체시킬 가능성이 있다.
- Belady의 이상현상: 페이지 프레임을 늘리며 오히려 페이지 부재가 더 많이 발생할 수 있다.
- LRU Least Recently Used
- 국부성 locality 휴리스틱에 기반: 최근 상황이 가까운 미래에 대한 좋은 척도, 시간/공간 국부성 사용
- 프로세스는 기억장치 내의 정보를 균일하게 액세스하는 것이 아니라 어느 한순간에는 특정 부분을 집중적으로 참조하는 국부성을 보인다.
- 참조시각을 이용한 구현:참조될 때마다 그때의 시각을 테이블에 기록하다가 교체가 필요한 경우 가장 참조시각이 오래된 것을 선택하기
- 리스트를 이용한 구현: 참조될 때마다 리스트의 선두로 옮김
- belady의 이상현상이 발생하지 않음, 최적화의 원칙에 근사
- 선택할 때 오버헤드가 발생, 국부성이 안맞는 경우도 있음
- LFU Least Frequently Used
- 메모리 내에 참조된 횟수가 가장 적은 페이지를 선택하여 교체
- 참조횟수를 이용해 구현
- 가장 최근에 메모리에 옮겨진 페이지가 교체될 가능성이 높음
- 초기에 많이 사용된 후 더 이상 사용되지 않는 페이지는 교체 가능성이 낮음
- 2차 기회 페이지 교체
- 참조 비트가 0이면서 메모리 내에서 가장 오래 있었던 페이지를 선택하여 교체
- FIFO큐와 참조 비트 이용
- 적재된 이후에 추가로 참조되면 참조 비트 1, 메모리에 적재될 때는 0,
- 빈 페이지 프레임이 없으면 순서대로 큐에서 꺼내는데 비트가 1이었다면 0으로 바꾸고 큐에 그대로 둔다
- 원형 큐를 이용한 구현
- 클럭 페이지 교체 알고리즘
- 포인터는 마지막에 추가된 페이지의 다음 위치를 가리킴, 큐가 다 찼다면 가장 선두를 가리킴
- 프로세스별 페이지 집합 관리방법
- 워킹 세트
- working set는 한 프로세스가 최근에 참조한 페이지의 집합이다.
- 프로세스가 효율적으로 수행되기 위해서는 워킹 세트가 메모리 내에 유지되어야 한다.
- thrashing 발생 문제, 프레세스가 반복해서 쓰는 집합(a, b, c, d)인 워킹세트를 메모리에 유지하지 않으면, 즉 a,b,c만 있으면 d가 들어올 때 a가 나가게 되며 차례대로 페이지가 순서대로 반복해서 매순간 업데이트되는 문제
- PFF 알고리즘
- 기본 아이디어는 페이지 부재 빈도가 높으면 페이지 프레임을 해당 프로세스에 더 배정하고 낮으면 회수하는 것이다.
- page fault frequency
- 오프셋 3만에 발생했으면 1/3, 오프셋 10만에 발생했으면 1/10, 즉 오랜만에 발생 할수록 빈도값이 작아진다
- 상한보다 높으면 프레임 개수 1 증가
- 하한보다 낮으면 오랜만에 부재가 발생했으면 그 사이에 참조되지 않았던 페이지를 모두 제거
Share article