개발일지

혼공컴운 9장~15장 요약 정리 (운영체제 파트) 본문

기록

혼공컴운 9장~15장 요약 정리 (운영체제 파트)

lyjin 2024. 8. 11.

9장. 운영체제 시작하기

9-1. 운영체제

운영체제란?

  • 실행할 프로그램에 필요한 자원을 할당하고 올바르게 실행되도록 도와주는 프로그램
  • 관리할 자원별로 기능이 나누어져 있음 (CPU 배분, 메모리 적재 등)

 
운영체제도 프로그램이다. 즉 메모리에 할당되어야 함!

  • 커널 영역: 운영체제가 사용하는 메모리 영역
  • 사용자 영역: 응용프로그램이 사용하는 메모리 영역

 


 

9-2. 커널

커널(Kernel)?

  • 운영체제가 제공하는 기능 중 핵심 서비스를 담당하는 영역
    • 운영체제마다 제공하는 서비스가 다를 수 있지만, 공통적으로 필요한 필수적인 기능을 담당
    • 예시로 사용자 인터페이스는 운영체제 기능이긴 하지만 커널 기능은 아니다.

 
 

이중모드

  • CPU가 명령어를 실행할 때 두 가지 모드로 구분하는 방식
    • 커널 모드: 운영체제 서비스를 제공 받을 수 있는 실행 모드 (커널 영역 코드 실행 가능)
    • 사용자 모드: 운영체제 서비스를 제공 받을 수 없는 실행 모드 (커널 열역 코드 실행 불가)
  • 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하기 위함

 
 

시스템 호출 (System call)

  • 응용 프로그램이 운영체제 서비스를 제공받기 위해 “사용자 모드 → 커널 모드로 전환”하기를 요청하는 것
  • 시스템 호출 과정
    1. 응용 프로그램이 시스템 콜
    2. 사용자 모드 → 커널 모드 전환
    3. 운영체제 코드 실행
    4. 커널 모드 → 사용자 모드로 복귀

 
 

운영체제 핵심 서비스

  • 프로세스 관리
    • 여러 프로세스를 어떻게 관리하고 실행할 지, 어떤 자원에 어떤 프로세스가 접근할 지 등을 관리
  • 자원 접근 및 할당
    • 프로세스는 CPU, 메모리, 입출력 장치 등 다양한 자원을 필요로 함 → 어떻게 분배하고 할당할 지
  • 파일 시스템 관리
    • 보조기억장치에 있는 파일, 디렉터리에 접근하고 사용하기 위한 서비스

 


10장. 프로세스와 스레드

10-1. 프로세스

프로세스(Process)란?

  • 실행 중인 프로그램 → 보조 기억 장치에 저장되어있던 프로그램이 메모리에 적재되면 프로세스
  • 유형
    • 포그라운드(foreground) 프로세스: 사용자 눈 앞에서 실행 중인 프로세스
    • 백그라운드(background) 프로세스: 사용자 눈에 보이지 않는 프로세스
    • 데몬(or 서비스): 백그라운드 프로세스 중, 사용자와 상호작용할 수 없는 프로세스

 
 

프로세스 제어 블록 (Process Control Block, PCB)

  • 프로세스를 식별하고 관리하기 위한 정보를 저장하는 자료구조
  • 커널 영역에 생성 → 프로세스 자체는 사용자 영역, PCB는 커널 영역에 적재 됨

 
 

문맥 교환 (Context switching)

  • 문맥 (context)?
    • 프로세스를 전환 시 이전 프로세스를 재개하기 위해 기억하고 있어야할 정보
    • PCB에 기록되는 정보라고 보면 됨

      ⇒ 이 문맥을 전환하는 과정을 “문맥교환”이라고 함
 

  • A → B 프로세스 변환 과정 예시
    1. A 프로세스 실행 중
    2. A 프로세스 문맥 → PCB에 백업
    3. 재개할 B 프로세스 문맥 → PCB로부터 복구
    4. B 프로세스 실행
  • 이 문맥교환이 매우 빠르게 일어나기 때문에 여러 프로세스가 마치 동시에 실행되는 것처럼 보이는 것. 그러나 너무 빈번한 문맥교환은 오버헤드 야기할 수 있다.

 
 

프로세스의 메모리 영역

  • 커널 영역: PCB
  • 사용자 영역
    • 코드 영역(or 텍스트 영역): CPU가 실행할 명령어(기계어), read-only
    • 데이터 영역: 프로세스가 종료될 때까지 유지되는 데이터 (ex. 전역 변수)
    • 스택 영역: 데이터가 일시적으로 저장되는 영역 (ex. 지역 변수, 매개 변수)
    • 힙 영역: 개발자가 직접 메모리 공간에 할당할 수 있는 영역 (ex. 객체, 포인터)
      • 사용 후 반환하지 않으면 메모리 누수(memory leak) 발생

 


 

10-2. 프로세스 상태와 계층 구조

프로세스 상태 (PCB에 기록 됨!)

  • 생성(new): 프로그램이 메모리에 막 적재되어 PCB를 할당받은 상태
  • 준비(ready): CPU 할당 받기를 기다리는 상태
  • 실행(running): CPU 할당되어 실행 중인 상태
    • 할당된 시간이 끝나면(타이머 인터럽트) → ready
    • 입출력 장치 사용을 원하면 → blocked로 변환
  • 대기(blocked): 입출력 장치 사용을 기다리는 상태
    • 입출력 작업 완료 후 → ready로 변환
  • 종료(terminated): 운영체제는 종료된 프로세스, PCB가 사용한 메모리를 제거 함

 
 

프로세스 계층 구조

  • 프로세스는 실행 도중 시스템 콜을 통해 다른 프로세스를 생성할 수 있다.
    • 시스템 콜한 프로세스 → “부모 프로세스”
    • 시스템 콜로 생성된 프로세스 → “자식 프로세스”
  • 부모 프로세스가 자식 프로세스를 생성하고, 그 프로세스가 또 다른 자식 프로세스를 생성하고 … → 트리 형태를 띄게 됨 (프로세스 계층 구조)

 
 

프로세스 생성 기법

  • fork()와 exec() 시스템 콜의 반복이라고 할 수 있다.
    • fork(): 자신 프로세스의 복사본을 만드는 시스템 콜
    • exec(): 메모리 공간을 새로운 프로세스로 덮어쓰는 시스템 콜 → 코드, 데이터 영역은 실행할 프로그램 내용으로 바뀌고 스택, 힙 영역은 초기화 됨

 
⇒ 즉 프로세스가 계층 구조를 갖는 과정은 fork와 exec의 반복 과정”이라고 할 수 있다.
 
 


 

10-3. 스레드

스레드(Thread)

  • 프로세스를 구성하는 실행 단위
  • 실행에 필요한 최소한의 정보를 제외하고는 프로세스 자원을 공유한다.
    • 공유X: 레지스터, 스택, 프로그램 카운터
    • 공유 자원: 코드, 데이터, 힙, 파일
  • 최근 많은 운영체제가 CPU 작업 할당 시 스레드 단위로 전달한다.

 
 

멀티 프로세스 vs. 멀티 스레드 “자원 공유” 유무의 차이!

  • 멀티프로세스
    • 서로 자원 공유X, 독립적인 흐름
    • 비효율적인 메모리 사용
  • 멀티스레드
    • 최소한의 정보 제외하고 프로세스 자원을 공유 함
    • 스레드 간 통신 및 협력에 유리하고 메모리 공간을 효율적으로 사용할 수 있지만, 한 스레드에 문제 발생 시 모든 스레드에 영향 줄 수 있음
    • 경쟁조건(race condition), 데드락(deadlock) 등을 방지하기 위한 동기화 기법 필요

 
 

프로세스 간 통신(Inter Process Communication, IPC)

  • 프로세스는 “기본적으로” 자원을 공유하지 않지만 자원 공유가 불가능한 것은 아니다.
  • 파일을 통한 프로세스 간 통신, 공유 메모리(shared memory) 등..

 
 


11장. CPU 스케줄링

11-1. CPU 스케줄링

CPU 스케줄링?

  • CPU는 한 번에 한 프로세스만이 할당 가능하지만 CPU 자원을 원하는 프로세스는 여러 개 → 효율적으로 할당할 방법이 필요

CPU 스케줄링: 운영체제가 여러 프로세스에게 공정하고 합리적으로 CPU 자원을 배분하는 것
 
 

우선순위(prioirty)

  • 프로세스마다 우선순위가 다르다. → PCB에 명시 됨
  • 우선순위는 입출력 집중 프로세스 > CPU 집중 프로세스
    • 입출력 작업에 들어간 프로세스는 “대기” 상태에 머물게 된다. 따라서 입출력 작업이 필요한 프로세스 먼저 실행시킨 뒤, 해당 프로세스가 “대기”에 머무는 동안 다른 프로세스의 CPU 작업을 진행하면 효율적인 스케줄링이 가능하다.

 
 

스케줄링 큐

  • PCB에 우선순위가 기록되긴 하지만 운영체제가 매번 모든 PCB를 확인하는 것은 매우 비효율적이다. 대신 운영체제는 프로세스의 상태나 필요로하는 자원에 따라 줄을 세우는데 이 줄이 “스케줄링 큐”

⇒ 운영체제가 프로세스의 스케줄링을 효율적으로 관리하기 위해 사용하는 대기열
 
 

스케줄링 큐 종류

  • 준비 큐(ready queue): CPU 할당 되기를 기다리는, 즉 “준비” 상태인 프로세스의 대기열
  • 대기 큐(waiting queue): 입출력 작업을 원하는, 즉 “대기” 상태인 프로세스의 대기열

 
 

선점형 vs. 비선점형 스케줄링

  • 선점형 스케줄링
    • CPU 자원 독점 불가, 다른 프로세스가 뺏을 수 있는 스케줄링
    • 자원 배분 가능, 문맥교환 과정에서의 오버헤드 가능성
  • 비선점형 스케줄링
    • CPU 자원 독점, 다른 프로세스가 뺏을 수 없는 스케줄링 (먼저 선점한 프로세스가 종료될 때까지 기다려야 함)
    • 자원 배분 불가, 오버헤드 가능성 감소

 


11-2. CPU 스케줄링 알고리즘

선입 선처리 스케줄링 (First Come First Served scheduling, FCFS)

  • 준비 큐에 삽입된 순서대로 프로세스 처리 / 비선점
  • “호위 효과(convoy effect)” 발생
    • (먼저 들어온) 긴 CPU 작업이 실행되는 동안 짧은 CPU 작업 실행이 지연되는 현상

 
 

최단 작업 우선 스케줄링 (Shortest Job First scheduling, SJF)

  • 작업시간이 짧은 프로세스 순서대로 처리 / 기본적으로 비선점
  • 호위효과 방지

 
 

라운드 로빈 스케줄링 (Round Robin scheduling, RR)

  • FCFS + 타임 슬라이스 적용한 스케줄링 방식 / 선점
    • 타임 슬라이스: 프로세스가 CPU를 사용할 수 있는 정해진 시간

 
 

최소 잔여 시간 우선 스케줄링 (Shortest Remaining Time scheduling, SRT)

  • RR + SJF 스케줄링 / 선점
    • 타임 슬라이스 만큼씩만 CPU를 사용 + 다음 프로세스 선택 시 남아있는 작업 시간이 가장 짧은 프로세스 선택

 
 

우선순위 스케줄링 (priority scheduling)

  • 우선순위에 따라 실행하는 스케줄링 방식
  • “기아(starvation) 현상” 발생
    • 우선순위가 낮은 프로세스가 계속해서 연기되는 현상
  • 에이징(aging)
    • 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식
    • 기아현상 방지하는 대표적인 기법

 
 

다단계 큐 스케줄링 (multilevel queue scheduling)

  • 우선순위 별 준비 큐를 여러 개 사용하는 스케줄링 방식 / 선점
  • 큐 별로 다른 스케줄링 방식, 타임 슬라이스 등 설정 가능하다.
  • 큐 사이 프로세스 이동 불가 → “기아 현상” 발생

 
 

다단계 피드백 큐 스케줄링 (multilevel feedback queue scheduling)

  • 큐 사이 이동 가능 + 에이징 → 기아 현상 개선한 다단계 큐 스케줄링
    • CPU 사용 시간이 길어질수록 우선순위 낮아짐
  • 구현은 복잡하지만 가장 일반적인 CPU 스케줄링 알고리즘

 
 


12장. 프로세스 동기화

12-1. 동기화?

동기화 (synchronization)

  • 멀티프로세스/멀티스레드 등 여러 작업이 협력하는 환경에서 프로세스들이 마구잡이로 실행된다면 문제가 발생할 수 있다. 따라서 프로세스 실행 순서와 자원의 일관성을 보장하기 위해 “동기화”는 필수이다.
  • 프로세스 동기화란 “프로세스의 수행 시기를 맞추는 것”
    • 실행 순서 제어: 프로세스를 올바른 순서대로 실행시키는 것
    • 상호 배제: 동시에 사용 되면 안되는 자원에 하나의 프로세스만 접근 가능하게 하는 것

동기화: 특정 자원에 한 프로세스만 접근하게 하거나 프로세스를 올바른 순서대로 실행하는 것
 
 

상호 배제 (mutual exclusion)

  • 공유 불가한 자원을 여러 프로세스가 동시에 사용하는 것을 피하기 위한 알고리즘

 
 

공유 자원 (shared resource)

  • 여러 프로세스가 공동으로 사용하는 자원
  • ex) 전역변수, 파일, 입출력장치 등

 
 

임계 구역 (critical section)

  • 공유자원 중 동시에 접근하면 문제 발생하는 자원에 접근하는 코드 영역
    • → 두 프로세스가 접근하면 한 프로세스는 대기해야 함

 
 

경쟁 조건 (race condition)

  • 여러 프로세스가 동시다발적으로 임계구역 코드를 실행하여 문제가 발생하는 경우 (데이터 일관성 X)

 
 

상호배제를 위한 동기화 세 가지 원칙

  • 상호배제(mutual exclusion): 임계구역에는 한 번에 하나의 프로세스만 접근할 수 있어야 한다.
  • 진행(progress): 임계구역에 아무도 없다면 진입을 원하는 프로세스 중 하나가 임계구역에 진입할 수 있어야 한다.
  • 유한대기(bounded waiting): 임계구역에 진입 하기를 원하는 프로세스는 무한정 대기해서는 안된다.

 
 


12-2. 동기화 기법

뮤텍스 락 (Mutex lock)

  • 상호배제를 보장하기 위한 락 메커니즘으로 한 번에 하나의 프로세스만 임계구역에 접근하도록 제어한다. (주로 단일 자원 동기화에 사용)
  • 프로세스가 임계구역에 진입하면 락(lock)을 획득하고 작업이 끝나면 락을 해제해 다른 프로세스가 접근할 수 있도록 한다.
  • 바쁜 대기(busy wait)
    • 임계구역이 잠겨있을 경우 락이 해제될 때까지 지속적으로 확인하며 기다리는 것 → CPU 자원 낭비 됨

 
 

세마포어 (Semaphore)

  • 카운터 값을 통해 여러 프로세스의 접근을 제어한다. (공유자원이 여러개일 때도 적용 가능)
  • 마찬가지로 바쁜 대기 발생 → “대기 큐” 사용하여 해결
    • 사용 가능한 공유자원이 없을 경우 대기 상태로 전환 된다. 이후 자원이 반환되면 대기 큐에 있던 프로세스가 임계구역에 진입할 수 있게 된다.

 
 

모니터 (Moniter)

  • 뮤텍스나 세마포어 사용 시 발생할 수 있는 오류를 방지하기 위해 설계된 고수준의 동기화 도구

 
 


13장. 교착 상태

13-1. 교착 상태

교착 상태 (Deadlock)

  • 두 개 이상의 프로세스가 서로의 자원을 얻기 위해 무한정 대기하는 현상

 
 

교착상태 발생 조건 → 모두 만족해야 발생 함

  • 상호배제: 이미 사용중인 자원을 다른 프로세스가 사용할 수 없음
  • 점유와 대기: 어떠한 자원을 사용중인 상태에서 다른 자원을 기다리는 상태
  • 비선점: 이미 사용중인 자원을 빼앗을 수 없음
  • 원형 대기: 원의 형태로 자원을 기다리는 상태 (=자원 할당 그래프가 원형일 때)

 
 


13-2. 교착 상태 해결 방법

예방

  • 교착상태 발생 조건 중 하나라도 충족하지 못하게 미리 방지하는 방법
  • 여러 부작용이 따르기 때문에 현실적으로 어려움

 
 

회피

  • 교착상태가 일어나지 않도록 조심해서 자원을 할당하는 방식

 
즉, “안전 상태”를 유지하도록 자원을 할당하는 방식

  • 안전 상태(safe state)
    • 교착 상태 없이 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
    • 안전 순서열이 존재하는 상태
  • 불안전 상태(unsafe state)
    • 교착 상태가 발생할 수도 있는 상태
    • 안전 순서열이 존재하지 않는 상태
  • 안전 순서열(safe sequence)
    • 교착 상태 없이 안전하게 자원 할당 할 수 있는 프로세스 할당 순서

 
 

검출 후 회복

  • 주기적으로 검사 하다가 교착 상태가 검출 되면 사후 조치하는 방법
  • 회복 방식
    • 선점을 통한 회복
    • 프로세스 강제종료를 통한 회복

 
 


14장. 가상 메모리

14-1. 연속 메모리 할당

연속 메모 할당?

  • 프로세스를 메모리에 연속적으로 할당하는 방식

 
 

스와핑 (Swapping)

  • 현재 실행 중이 아닌 프로세스를 임시로 보조기억장치 일부 영역으로 보내고, 실행할 다른 프로세스를적재하는 방식
    • 이때 보조기억장치의 일부 영역이 “스왑 영역(swap space)”
    • 스왑인(swap-in): 실행 중이 아닌 프로세스를 스왑 영역 → 메모리로 옮기는 과정
    • 스왑 아웃(swap-out): 실행 중인 프로세스를 메모리 → 스왑 영역으로 옮기는 과정
  • 스와핑을 이용하면 실제 메모리 크기보다 큰 프로세스들을 동시에 실행시킬 수 있다.

 
 

메모리 할당 방식

  • 최초 적합(first fit): 빈 공간을 순차적으로 탐색하다가 가장 먼저 발견한 빈 공간에 할당하는 방식
  • 최적 적합(best fit): 빈 공간을 모두 탐색한 뒤 가장 크기가 작은 공간에 할당하는 방식
  • 최악 적합(worst fit): 빈 공간을 모두 탐색한 뒤 가장 크기가 큰 공간에 할당하는 방식

 
 

외부 단편화(External fragmentation) → 연속 메모리 할당의 문제점!

  • 프로세스들의 반복적인 실행 및 종료 과정에서 사이사이 빈 공간이 발생 → 프로세스를 할당하기 힘든 만큼의 작은 메모리 공간들로 인해 메모리가 낭비되는 현상
    • ex) 50MB, 30MB, 20MB 세 개의 빈 공간이 있을 때, 전체 메모리로 보면 총 100MB 만큼의 빈 공간이 남아있음에도 100MB 프로세스를 적재할 수 없음

 

  • 해결 방법
    • 압축(compaction): 메모리 내 프로세스들을 주기적으로 재배치하여 흩어져있던 여러 빈 공간을 하나의 큰 빈 공간으로 만드는 방법
      • 재배치하는 동안 하던 작업을 중단해야 함
      • 재배치 과정에서 오버헤드 야기
    • 페이징(paging)
      • 오늘 날 흔히 사용 되는 가상 메모리 기법!

 
 


14-2. 페이징을 통한 가상 메모리 관리

가상메모리

  • 실행할 프로그램 일부만 메모리에 적재해 실제 물리적인 메모리 공간보다 크기가 큰 프로세스를 실행할 수 있도록 하는 기법
  • ex) 페이징, 세그멘테이션 등

 
 

페이징(Paging)

  • 메모리와 프로세스를 일정한 단위로 자른 뒤 이를 메모리에 불연속적으로 할당하는 방식 → 외부 단편화 해결!
    • 페이지(page): 프로세스의 논리 주소 공간 단위
    • 프레임(frame): 메모리의 물리 주소 공간 단위

⇒ 프로세스는 페이지, 메모리는 프레임 단위로 나눈 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법
 

  • 페이징에서도 스와핑이 일어난다.
    • 프로세스 단위가 아닌 페이지 단위 → 페이지 인/페이지 아웃
    ⇒ 즉, 한 프로세스를 실행시키기 위해 프로세스 전체가 메모리에 적재되지 않아도 된다.

 
 

페이지 테이블

  • 프로세스는 메모리에 불연속적으로 할당 되기 때문에 CPU는 프로세스 실행 순서를 알기 어렵다.
  • → 논리 주소가 연속적으로 배치되는 “페이지 테이블”을 이용해서 해결 가능
  • → CPU는 물리 주소를 모르더라도 페이지 테이블의 논리 주소만 순차적으로 실행하면 된다.

페이지 테이블: 페이지 번호-프레임 번호를 매칭하여 관리하는 공간
 

  • 메모리 내부에서 관리
    • 총 두 번의 메모리 접근을 필요로 하여 메모리 접근 시간이 증가 한다. (1. 페이지 테이블 접근, 2. 프레임 접근)
    • TLB로 해결 가능

 
 

페이지 테이블 베이스 레지스터(Page Table Base Register, PRBR)

  • CPU 내부에 저장 되며, 각 프로세스의 페이지 테이블이 적재된 주소를 가리킨다. (프로세스마다 각자의 페이지 테이블이 존재)

 
 

TLB (Translation Lookaside Buffer)

  • CPU가 사용하는 페이지 테이블 캐시 메모리
  • 참조 지역성에 근거하여 페이지를 저장한다.
    • TLB 히트: 접근하려는 페이지 번호가 TLB에 존재할 경우 → 페이지 테이블에 접근하기 위한 메모리 접근 필요X → 메모리 접근 시간 감소
    • TLB 미스: 접근하려는 페이지 번호가 TLB에 존재하지 않을 경우

 
 

페이징에서의 주소 변환

  • 페이지 = <페이지 번호, 변위>
    • 페이지 번호(page number): 접근하려는 페이지 번호
    • 변위(offset): 프레임 시작 번지로부터 얼만큼 떨어져 있는지
  • 논리 주소 <페이지 번호, 변위> → 물리 주소 <프레임 번호, 변위> 로 변환된다.

 
 

페이지 테이블 엔트리(Page Table Entry, PTE) 요소

  • 페이지 번호
  • 프레임 번호
  • 유효비트(valid bit): 해당 페이지에 접근 가능한가? (=현재 메모리에 프로세스가 적재되어 있는가?)
    • 비트가 0, 즉 메모리에 적재되지 않았을 경우 “페이지 폴트(page fault)” 예외 발생
  • 보호비트(protection bit): 해당 페이지에 쓰기 가능한가? (페이지 접근 권한)
  • 참조비트(reference bit): CPU가 해당 페이지에 접근한 적 있는가?
  • 수정비트(modified bit): 해당 페이지에 데이터를 쓴 적이 있는가?
    • 페이지 아웃될 때 보조기억장치에 쓰기 작업을 해야하는지 판단하기 위해 존재한다.
    • 비트가 0, 즉 데이터가 한번도 수정되지 않은 경우 수정된 내용을 보조기억장치에 기록하는 과정을 건너뛰어도 된다.

 
 

+) 더 알아보기

내부 단편화 (Internal framentation)

  • 할당된 메모리 블록 내에서 사용 되지 않고 낭비되는 메모리 공간
  • ex) 페이지 크기를 10KB 단위로 나눴다고 가정하고 28KB 프로세스를 할당하려면 10KB, 10KB, 8KB 총 세 개의 블록이 사용된다. → 마지막 블록에 2KB의 빈 공간이 낭비 됨

 

 

쓰기 시 복사(copy on write) - 페이징의 두번째 이점

  1. fork 시스템 호출로 새로운 프로세스를 생성 했을 때, 이 자식 프로세스는 부모 프로세스와 동일한 프레임 주소를 갖게 된다.
  2. “쓰기”가 발생하는 순간 해당 페이지가 별도의 공간으로 복제 된다.

⇒ 프로세스 생성 시간 감소, 메모리 공간 절약 가능
 
 

 

계층적 페이징 (다단계 페이지 테이블)

  • 모든 PTE를 메모리에 두는 것은 메모리 낭비이다.

⇒ 페이지 테이블을 여러 단계로 나누어 계층 구조로 관리하는 방식 도입 (계층적 페이징)
 

  • Outer 페이지 테이블
    • 페이지 테이블을 여러 개로 나누고 각 페이지 테이블 위치를 가리키고 있는 상위 레벨의 페이지 테이블
    • 메모리 내부에서 관리 되며 CPU 가장 가까이 위치 함

 

  • 논리 주소 구조
    • <outer 페이지 번호, 페이지 번호, 변위>

 

 


14-3. 페이지 교체와 프레임 할당

운영체제는 한정된 물리 메모리 공간을 효율적으로 사용하기 위한 여러 기능을 수행한다.

 

 

요구 페이징(Demand paging)

  • 프로세스를 메모리에 적재할 때 전체 프로세스가 아닌 필요한 일부만 적재하는 기법

 

  • 과정
    1. CPU가 특정 메모리에 접근하기 위한 명령어를 실행한다.
    2. 페이지 테이블 참조하여
      • 해당 페이지가 현재 메모리에 있는 경우(=유효 비트 1) → 해당 페이지에 접근
      • 메모리에 없는 경우(=유효 비트 0) → 페이지 폴트 발생
    3. 페이지 폴트가 발생한 경우, 처리 과정을 거쳐 해당 페이지를 메모리에 적재하고 유효 비트를 1로 변경한다.
    4. 다시 1번 과정부터 반복

 

  • 순수 요구 페이징 (Pure dmand paging)
    • 아무 페이지도 메모리에 적재되지 않은 상태에서 무작정 실행부터 하는 기법
    • 시작하자마자 페이지 폴트가 반복되고, 페이지가 어느정도 적재되고나면 그 빈도가 줄어듦

 

  • 페이지 폴트가 자주 발생하는 이유
    1. 나쁜 페이지 교체 알고리즘
    2. 프로세스가 사용할 수 있는 프레임 수가 부족할 경우
    ⇒ 안정적인 요구 페이징 시스템을 위해서는 1. 페이지 교체, 2. 프레임 할당  두 가지에 유의해야 한다.

 

 

페이지 교체 알고리즘

  • 물리 메모리 공간이 가득 찬 상태에서 페이지 폴트가 발생하면 적재된 페이지 중 하나를 보조기억장치로 내보내야한다. ⇒ 페이지 폴트 발생 시 페이지 아웃 할 페이지를 결정하는 방법이 "페이지 교체 알고리즘"
  • 좋은 페이지 교체 알고리즘이란 “페이지 폴트를 적게 일으키는” 알고리즘 → 페이지 폴트 횟수가 알고리즘 성능의 지표가 됨

 

 

페이지 교체 알고리즘 종류

  • FIFO(First In First Out): 선입선출, 구현이 간단하지만 비효율적이다.
  • 최적 페이지 교체 알고리즘(optimal page replacement): 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 방법
    • 이론적으로 가장 낮은 페이지 폴트율을 갖는, 가장 효율적인 알고리즘
    • 실제 구현이 어려워 실사용보다는 다른 알고리즘의 성능을 평가하기 위한 용도로 사용.
  • LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 페이지를 교체하는 방법

 

 

스래싱(thrashing)

  • 프로세스 실행보다 페이징에 더 많은 시간을 소요해 시스템 성능이 저해되는 현상
    • 프레임이 부족하면 → 페이지 폴트 빈도수가 증가하고 → CPU 이용률이 저하 됨
    • 즉 멀티프로그래밍 정도가 늘어난다고 해서 무조건 CPU 이용률이 증가하는 것은 아니다. (CPU 성능이 좋아도 메모리 성능이 받쳐주지 않으면 전체 컴퓨터 성능은 저하 됨)
  • 스래싱의 근본적인 원인은 “각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않았기” 때문이다. → 적절한 프레임 할당 방식 필요!

 

 

프레임 할당 방식

  • 정적 할당 방식
    • 균등 할당(equal allocation): 모든 프로세스에 동일한 수의 프레임을 할당하는 방식
    • 비례 할당(proportional allocation): 프로세스 크기에 비례하여 프레임을 할당 하는 방식

 

  • 동적 할당 방식
    • 작업 집합 모델 기반(working set model)
      • 작업 집합: 프로세스가 일정기간동안 참조한 페이지 집합 → 작업 집합 크기에 따라 동적으로 할당
      • 각 프로세스가 실행되는 동안 필요한 페이지 수만큼만 프레임을 할당 받는다.
    • 페이지 폴트 빈도율 기반(Page Fault Frequency, PFF)
      • 페이지 폴트율의 상한선과 하한선을 정한 뒤 이 범위 내에서 프레임 수를 동적으로 조정 하는 방식

 
 


15장. 파일 시스템

15-1. 파일과 디렉터리

  • 파일과 디렉터리는 운영체제 내부의 파일 시스템이 관리하는 존재이다.

 

파일

  • 보조기억장치에 저장된 관련 정보의 집합 → 의미있고 관련 있는 정보를 모은 논리적 단위
  • 응용 프로그램이 파일에 바로 접근할 수 없으며 “시스템 호출”이 필요하다.

 

디렉터리 (=폴더)

  • 마찬가지로 디렉터리에 접근하기 위한 시스템 호출을 제공한다.

 

  • 디렉터리 엔트리
    • 운영체제는 디렉터리를 파일의 일종으로 취급한다.
    • 해당 디렉터리에 담겨 있는 대상(파일 또는 디렉터리)과 관련된 정보를 테이블 형태로 저장하여 관리한다.
    • 각 엔트리에는 대상의 이름과 보조기억장치 내 저장된 위치 정보가 담겨있다.

 

 


15-2. 파일 시스템

파일시스템?

  • 파일과 디렉터리를 보조기억장치에 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램

 

 

파티셔닝과 포매팅

보조기억창치를 사용하기 위해선 파티셔닝과 포매팅 과정을 거쳐야한다.

  • 파티셔닝(partitioning)
    • 저장 장치의 논리적인 영역을 구분짓는 작업
    • 파티션(partition): 파티셔닝으로 나뉘어진 각각의 영역
  • 포매팅(formatting)
    • 어떤 방식으로 파일을 저장하고 관리할 지 결정하는 작업
    • ⇒ 즉 사용할 “파일 시스템”을 결정하는 작업

 

 

파일 할당 방법

  • 운영체제는 파일을 블록(block) 단위로 관리한다.
    • 하드디스크의 저장 단위는 “섹션” → 섹션을 묶은 게 “블록”
    • 하나 이상의 블록에 파일을 할당한다.

 

  • 연속 할당: 말그대로 연속적인 블록에 할당하는 방식
    • 구현이 간단하지만 외부 단편화 야기

 

  • 불연속 할당
    • 연결 할당: 각 블록마다 다음 블록 주소를 기입 → 연결리스트 구조
      • 외부 단편화 해결
      • 반드시 첫번째 블록부터 차례대로 접근해야 한다.→ 오류 발생 시 해당 블록 이후로는 접근 불가
      • → 임의 접근 속도 저하
    • 색인 할당: 파일의 모든 블록 주소를 “색인 블록(index block)”에 모아 관리하는 방식
      • 비교적 임의 접근이 쉽다.
      • 색인 할당 방식의 파일 시스템은 디렉터리 엔트리에 색인 블록 주소를 함께 명시한다.

 

 

파일 시스템

  • FAT파일 시스템
    • FAT를 사용하여 연결 할당의 단점을 보완한 파일 시스템
    • 파일 할당 테이블(File Allocation Table, FAT)
      • 각 블록의 다음 블록 주소를 한데 모아 관리하는 테이블
      • 디렉터리 엔트리에 첫번째 블록 주소가 함께 명시된다.
      • 파티션 앞부분에 생성 되며 실행 도중 캐시될 수도 있다. → 임의 접근 성능 개선

 

  • 유닉스 파일 시스템
    • 색인 할당 기반의 파일 시스템
    • i-node: 유닉스 파일 시스템의 색인 블록
      • 파일 속성 정보가 디렉터리 엔트리가 아닌 i-node에 저장 됨 (디렉터리에는 <i-node 번호, 파일 이름> 저장)
      • 최대 15개의 블록 주소까지 저장 가능
      • 파일 크기가 클 경우 12개의 “직접 블록”과 3개의 “간접 블록” 사용

 


 

책 정보

 

혼자 공부하는 컴퓨터 구조+운영체제 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com