본문 바로가기
컴퓨터공학기초 개념/운영체제

컴공기초 - 운영체제 개념 총정리(하)

by devraphy 2021. 7. 22.

1. 교착(Deadlock)과 기아(Starvation) 상태 

- 교착과 기아상태는 스레드의 동기화 이슈를 해결하기 위해 작성하는 로직에서 발생하는 문제다. 

 

▶ 교착(Deadlock)

   - 대기중인 두 스레드가 서로의 작업이 끝나기를 기다리는 상황(= 무한대기)

 

 

▶ 교착(dealock)의 발생조건

  • 상호배제(Mutex)
    - 프로세스들이 필요로하는 자원에 대해 독점을 요구

  • 점유대기(Hold & Wait)
    - 프로세스가 자원을 할당받은 상태에서 다른 자원을 기다림

  • 비선점(Non-preemptive)
    - 다른프로세스가 사용중인 자원을 뺏을 수 없음

  • 순환대기(Circular wait)
    - 각 프로세스가 다음 프로세스가 요구하는 자원을 가지고 있음

 

 

▶ 교착의 해결방안

   - 위의 4가지 발생조건 중 한가지를 제거한다. 

 

 

▶ 기아(Starvation)

   - 특정 프로세스의 우선순위가 낮아 영원히 자원을 할당받지 못하는 상태 

 

 

▶ 기아(Starvation)의 해결방안

   - 프로세스의 우선순위를 수시로 변경한다.

   - 대기시간이 긴 프로세스에게 우선권을 부여하는 로직을 작성한다.

   - 프로세스의 우선순위보다 요청순서대로 처리하도록 FIFO 방식의 Queue를 사용한다. 

 


2. 가상 메모리

- 프로세스는 하나당 4GB의 메모리를 할당 받는다. 

- 실제로 4GB의 메모리를 할당받는 것이 아니라 4GB 만큼의 가상 메모리의 주소영역을 할당받는 것이다.

 

 

▶ 가상 메모리가 필요한 이유

   - 여러 프로세스를 동시에 처리하기 위함

   - 메모리 용량 부족 이슈를 해결하고 프로세스간의 영역 침범을 방지하기 위함

 

 

▶ 가상 메모리란?

   - 실제 메모리의 용량보다 더 많은 메모리를 보유한 것처럼 보이게 하는 기술 

   - 가상 메모리를 사용하여, 프로세스 간 영역을 분리하기 위한 기술

   - 프로세스에서 발생하는 이슈가 시스템 전체에 영향을 주지 않게 하기위함. 

 

 

▶ 가상 메모리의 구조 

  • 커널 영역
    - 3~4GB의 주소영역
    - OS 코드가 할당되는 영역, 모든 프로세스가 공유함

  • 사용자 영역
    - 0~3GB의 주소영역
    - 응용 프로그램의 소스가 할당되는 가상 메모리 영역  

 

 

▶ CPU에서 가상 메모리를 통해 물리 메모리에 접근하는 과정

  • CPU - 가상주소 - MMU - 물리주소 - 데이터 - CPU에게 반환

  • MMU(Memory Management Unit)
    - 가상주소를 빠르게 물리주소로 변환하는 HW 

 


3. 페이징 시스템

- 가상 메모리와 물리 메모리의 공간을 관리하는 방법론

- 페이지 라는 고정된 크기(4kb)의 단위를 사용하여 가상 & 물리 메모리의 주소를 분할한다. 

 

▶ 페이지 주소의 구조

  • 가상주소 v = (p, d)
    - p(페이지 번호, 페이지 테이블에서 검색하기 위한 용도)
    - d(변위, 물리 메모리의 시작주소로 부터 얼마나 멀리 떨어져 있는지를 명시)
    - 모든 페이지는 p, d를 갖고 있다. 


  • 실제 데이터의 물리주소 = p의 물리 메모리 시작주소 + d(변위)

 

 

▶ 페이지를 이용한 물리 메모리 접근 과정 

  • 페이지 - 페이지 번호 - 페이지 테이블에서 페이지 번호 검색 - 물리 메모리의 시작주소 확인 - 변위를 이용해 데이터의 물리주소 확인 - 데이터 반환 

 

 

▶ 페이지 테이블이란?

   - 0~3GB의 가상주소를 4kb 단위로 나누어 관리하면 약 750,000개의 페이지가 생성된다.

   - 검색의 편의를 위해, 75만개의 페이지를 그룹화하여 관리하는 장부를 페이지 테이블이라고 한다. 

   - 페이지 테이블에는 각 페이지의 물리 메모리의 시작주소가 연결되어 있다.

   - 페이지 테이블은 프로세스의 생성과 동시에 생성되며, PCB에서 접근이 가능하다.

   - 페이지 테이블은 물리 메모리에 적재된다.

   - 페이지 테이블의 시작 주소값은 CR3 레지스터에 저장되어 있다.    

 

 

▶ 다중 단계 페이지 시스템

   - 각 프로세스는 75만개의 페이지를 생성하고, 이를 페이지 테이블을 이용하여 관리한다.

   - 하지만, 75만개의 페이지를 모두 사용하는 것이 아니기에 메모리 공간의 낭비가 발생한다. 

   - 이를 해결하기 위해, 실제로 사용되거나 data를 갖는 페이지만을 페이지 테이블에 등록하여 관리하는 방법 

 

 

▶ 다중 페이지 시스템을 통해 데이터를 찾는 과정

CPU - 가상주소 - MMU - CR3 레지스터 - 페이지 테이블 - 물리메모리 시작주소 + 변위 - 데이터 - CPU에게 반환 

 

 

▶ 페이지 시스템의 문제점 

   - MMU에서 페이지 테이블에 접근하기 위해서 CR3 레지스터를 거쳐 물리메모리에 접근한다. 

   - 이 방식은 과정 자체가 복잡하고 많은 시간을 소비한다. 

 

 

▶ 해결방안 

  • TLB(Translation Lookaside Buffer)
    - 매번 메인 메모리(= 물리메모리)에 접근하는데 걸리는 시간을 최소화하기 위한 목적으로 사용한다.
    - 한번 변환된 가상주소의 물리 주소값을 저장해 놓는 캐쉬 하드웨어다. 

  • TLB를 사용해 데이터를 찾는 과정

클릭하면 확대됩니다.

 

▶ 내부 단편화 

   - 고정된 크기의 단위인 페이지를 사용하기 때문에 발생하는 문제다.

   - 페이지 크기보다 할당된 메모리 공간이 큰 경우 발생하는 메모리 낭비를 의미한다. 

 


4. 페이지 시스템과 공유 메모리 

- 프로세스 A, B가 서로 다른 가상주소에 동일한 데이터를 가리키는 경우,

- 물리 메모리에는 해당 데이터에 대한 하나의 물리주소 만을 할당한다.

- 이는 페이지 시스템에서 공유 메모리를 사용하기 때문에 가능한 것이다.  

 

 

▶ 공유 메모리로 가능한 것들

   - 프로세스의 커널 영역을 모든 프로세스가 공유한다. 

   - 리눅스의 경우, 프로세스를 생성할 때 어떤 프로세스를 복사하여 생성한다.

   - 그러므로 중복되는 data에 대해서는 따로 물리 메모리를 할당하지 않는다.

 

 

▶ 만약 공유하는 data를 어떤 프로세스에서 변경한다면?

   - 기존 물리주소의 데이터를 복제한 후, 새로운 물리주소에 변경된 값을 할당한다.

   - 값을 변경한 프로세스의 페이지 테이블에 존재하는 기존 데이터의 가상주소와 새로 할당된 물리주소를 연결한다.  

 


5. 다양한 페이징 기법 

- 어떤 데이터를 어떤 시점에 물리 메모리에 올릴 것인가를 기준으로 달라지는 방법론 

 

▶ 선행 페이지 기법(pre-paging)

   - 모든 데이터를 물리메모리에 올리는 방식

   - 현실성이 없으므로 사용되지 않는 방식 (메모리 공간 낭비)

 

 

▶ 요구 페이징 기법(demanded paging)

   - 필요한 시점에, 필요한 페이지만 물리메모리에 올리는 방식

   - 필요없는 페이지는 물리 메모리에서 내린다. 

 


6. 페이지 폴트(Fault)

- 필요한 페이지가 물리 메모리에 존재하지 않는 경우에 발생하는 인터럽트

- 페이지 폴트가 발생하면 OS에서 해당 페이지를 물리 메모리에 올린다.

 


7. 페이지 교체 정책(Page Replacement Policy)

- Swapping Algorithm으로, 어떤 페이지를 메모리에 올리고 내릴지를 결정하는 방법론이다. 

 

▶ FIFO 정책

   - 가장 먼저 올라간 페이지와 교체

   - 현실성 없음 

 

 

▶ 최적 페이지 정책(OPT)

   - 가장 오래 사용하지 않을 페이지와 교체

   - 미래 예측이 필요하므로 구현 불가능 

 

 

▶ LRU(Least Recently Used) 정책

   - 가장 오래전에 사용된 페이지와 교체

   - 과거 기록을 기반한 교체 알고리즘 

   - 가장 많이 사용되는 정책 

 

 

▶ LFU(Least Frequently Used) 정책

   - 가장 적게 사용된 페이지와 교체

   - 사용 기록을 기반한 교체 알고리즘 

 

 

▶ NUR(Not Used Recently) 정책 

   - 최근에 사용하지 않은 페이지와 교체

   - 각 페이지마다 참조비트(R - read)와 수정비트(M - modified)를 할당한다.

   - (0,0), (0,1), (1,0), (1,1) 순으로 페이지 교체된다. (0 - false / 1 - true)

 


8. Thrashing

- 페이지 교체가 과도하게 발생하여 아무것도 하지 못하고 페이지 교체 작업만 일어나는 상황 

- 충분한 메모리 spec이 필요한 이유 

 


9. Segmentation 

- 페이지 기법과 비교되는 메모리 관리 방법론 

- 가상, 물리 메모리 모두 서로 다른 크기의 단위인 segment를 이용하여 분할함 

- 페이지 기법과 동일하게 segment 또한 v = (s, d)의 가상주소 형식을 가진다.

- 페이지 테이블과 동일하게 세그먼트 테이블을 갖고 있다. 

 

▶ segmentation의 문제점 

  • 외부 단편화
    - 서로 다른 크기를 갖는 segment를 사용하기 때문에 발생하는 문제
    - 메모리 공간에 비해 segment가 큰 경우 발생하는 메모리 초과를 의미한다. 

댓글