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가 큰 경우 발생하는 메모리 초과를 의미한다.
'컴퓨터공학기초 개념 > 운영체제' 카테고리의 다른 글
컴공기초 - 운영체제 개념 총정리(상) (0) | 2021.07.16 |
---|---|
39. 가상머신의 이해 (0) | 2021.07.12 |
38. 부팅의 이해 (0) | 2021.07.12 |
37. 파일 시스템 - inode 방식과 가상 파일시스템 (0) | 2021.07.09 |
36. 파일시스템 - 파일 시스템의 이해 (0) | 2021.07.09 |
댓글