운영체제
운영체제는 시스템의 자원들을 효율적으로 관리하고, 사용자가 컴퓨터를 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임이다. 주요 자원으로 프로세스, 기억장치, 주변장치, 파일 관리를 수행합니다.
프로세스와 스레드
프로세스
실행 중인 프로그램. 디스크에서 메모리로 적재되어 CPU자원을 할당받을 수 있는 것을 말한다. 프로세스에 할당되는 메모리 안에는 스택, 힙, 데이터, 코드 영역을 포함한다.
simple) 사용자가 어떤 프로그램을 실행시키면 메모리에 올라오게 되고 CPU가 이를 처리하게 된다. 이때 프로그램이 메모리에 올라와있는 상태를 프로세스라고 한다.
PCB
Process Control Block의 약자로 프로세스 제어 블록. 프로세스에 대한 중요한 정보를 저장하고 있다. 운영체제가 프로세스를 표현한 것이라고 볼 수 있다. 프로세스 생성 시 만들어지며, 주 기억장치에 유지된다. 문맥 전환 등 다른 프로세스를 처리해야할 때, PCB에 현재 상태를 저장해서 나중에 그 작업 상태를 불러와 작업을 재개한다.
PC
Program Counter의 약자로, 다음에 실행될 명령어의 주소가 들어있는 레지스터. 명령어가 인출되면 자동으로 다음 명령어를 가리키도록 주소값이 증가된다.
캐시 메모리
CPU의 레지스터와 메모리 사이에서 캐싱을 통해 병목 현상을 완화
스레드
프로세스의 작업 실행 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위이다. 즉 멀티스레드는 한 프로세스 내에 여러 개의 프로그램의 흐름을 말한다. 스레드 간에는 프로세스의 주소나 자원을 공유할 수 있다. 스레드 간에는 각자 독립적으로 작업을 수행해야하기 때문에, 각각 스택과 PC레지스터를 받는다.
멀티 스레드
장점
- 멀티 프로세스에 비해 메모리와 자원의 소모가 줄어든다.
- 힙 영역을 사용하면 프로세스 간 통신에 비해 스레드간 통신이 훨씬 간단하다.
- 스레드의 문맥전환은 캐시 메모리를 비울 필요가 없어 빠르다.
단점
- 힙 영역을 공유하기 때문에 해당 자원 사용시, 동기화가 필요
- 동기화를 위해 과도한 Lock을 사용하면 병목현상 발생
멀티 프로세싱과 멀티 프로그래밍
CPU코어의 관점에서 생각한다면,
- 멀티 프로세싱: 여러 개의 CPU로 여러 개의 프로세스를 수행
- 멀티 프로그래밍: 하나의 CPU로 여러 개의 프로세스를 수행
프로세스(스레드)의 동기화
경쟁 상태(Race Condition)
2개 이상의 프로세스 혹은 스레드가 공유 자원을 동시에 사용할 때 그 순서에 따라 결과가 달라지는 문제.
예를 들어, 은행 잔고에서 입금과 출금이 동시에 이루어지면서 한 쪽이 반영 안되는 상황
임계영역과 크리티컬 섹션
임계영역은 프로세스간 자원이 공유될 수 있는 코드 블록, 크리티컬 섹션은 하나의 동기화 방법을 말한다. 임계 영역을 프로세스들이 같이 쓸 수 있는 전제 조건은 다음과 같다.
- 상호 배제: 프로세스가 크리티컬 섹션에 들어가 있다면, 다른 프로세스는 크리티컬 섹션에 들어갈 수 없다.
- 진행 : 크리티컬 섹션에 들어가 있는 프로세스가 없다면 다른 후보 프로세스가 진입할 수 있다.
- 한정된 대기 : 프로세스의 진입 가능 횟수에는 제한이 있다.
Lock
하드웨어 기반의 처리로 임계 영역에 진입하기 위해서 Lock이 필요하다. 임계 영역에 들어가는 프로세스는 Lock을 획득, 빠져나올때는 다시 Lock을 반납한다.
교착상태(Dead Lock)
상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하여 무한정 기다리는 현상.
멀티 프로그래밍 환경에서 CPU와 같은 한정되고 공용 자원을 사용할 때 발생할 수 있다.
교착상태 발생의 필요 충분 조건
- 상호 배제: 한 번에 한 개의 프로세스만 공유 자원을 사용할 수 있다.
- 점유와 대기: 최소 하나의 자원을 점유하면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
- 비선점: 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다.
- 환형 대기: 공유 자원과 이를 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다.
교착상태 해결법
- 예방 기법: 교착상태 발생의 필요 충분 조건 4가지 중 하나를 강제로 제거한다. 자원의 낭비가 가장 심한 기법
- 회피 기법: 교착상태가 발생하면 적절히 피해나가는 방법으로, 은행원 알고리즘이 사용된다.(각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태를 안전상태)
- 발견 기법: 시스템을 점검해 교착상태에 있는 프로세스와 자원을 발견하는 것을 의미.(알고리즘 or 자원 할당 그래프 등을 사용)
- 회복 기법: 교착상태를 일으킨 프로세스를 종료하거나, 교착상태의 프로세스에 할당된 자원을 선점해 프로세스나 자원을 회복하는 것을 의미.
Context Switching(문맥 교환)
하나의 프로세스에서 다른 프로세스로 CPU가 할당되는 과정에서 발생되는 것
멀티 프로세스 환경에서 CPU 스케쥴러가 인터럽트 발생 시, 현재 프로세스 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 것을 말함.
인터럽트의 종류
I/O Request: 입출력 요청
Time Slice Expired: CPU 사용시간 만료
Fork Child: 자식 프로세스 생성
Wait for Interrupt: 인터럽트 처리 대기
Context Switching을 할 때, CPU는 작업을 하지 못하기 때문에 잦은 Switching은 성능 저하를 일으킬 수 있다.
CPU 스케쥴링
스케쥴링은 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업을 의미.
스케쥴링의 목적은 CPU나 자원을 효율적으로 사용하기 위한 정책으로 공정성, 처리율 증가, CPU 이용률 증가, 우선순위 제도나 무한 연기 회피 등이 있다.
스케쥴링의 종류
- 장기 스케쥴링: 어떤 프로세스가 시스템의 자원을 차지할지 결정하여 준비상태 큐로 보내는 작업
- 중기 스케쥴링: 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업
- 단기 스케쥴링: 프로세스가 실행되기위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업
비선점 스케쥴링 기법
이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케쥴링 기법. 모든 프로세스에 대한 요구를 공정하게 처리하고 응답 시간의 예측이 가능함. 그러나 중요하지 않은 작업이 중요한 작업보다 먼저 수행되는 경우가 발생.
종류는 FCFS, SJF, 우선순위, HRN, 기한부 등이 있다.
선점 스케쥴링 기법
하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 이를 강제로 빼앗아 사용할 수 있는 기법. 빠른 응답시간을 요구하는 대화식 시분할 시스템에 사용되며 우선순위가 높은 프로세스를 빠르게 처리할 수 있다. 그러나 많은 오버헤드가 발생한다.
종류는 Round Robin, SRT, 선점 우선순위, 다단계 큐 등이 있다.
동기, 비동기, 블로킹, 넌블로킹의 차이
- 동기: 어떤 일에 대한 요청과 응답이 동시에 이뤄져야 하는 것
- 비동기: 어떤 일에 대한 요청과 응답이 따로 이루어지는 것
- 블로킹: 어떤 요청에 대한 응답이 올 때까지 대기하는 것. 동기를 위해서 블로킹이 되야함.
- 넌블로킹: 어떤 요청에 대해 응답을 대기하지 않고 계속 루틴을 수행하는 것.
메모리(주기억장치)
기억장치는 레지스터, 캐시 기억장치, 주 기억장치, 보조기억장치를 계층 구조로 분류할 수 있다.(접근 속도, 접근 시간)
기억장치 관리 전략의 개요
보조기억장치의 프로그램이나 데이터를 주 기억장치에 적재 시키는 시기, 위치, 등을 지정해 한정된 주 기억장치의 공간을 효율적으로 사용하기 위한 것으로 반입, 배치, 교체 전략이 있다.
- 반입 전략: 보조기억장치의 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략
- 배치 전략: 새로 반입되는 프로그램이나 데이터를 주 기억장치의 어디에 위치시킬 것인지 결정하는 전략
- First fit: 첫 번째 분할 영역에 배치
- Best fit: 단편화를 가장 작게 남기는 영역에 배치
- Worst fit: 단편화가 가장 많이 남는 영역에 배치
- 교체 전략: 주기억장치의 모든 영역이 이미 사용 중일때, 새로운 프로그램이나 데이터가 들어온다면 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지 결정하는 전략.(FIFO, OPT LRU, LFU, NUR, SCR)
여기서 단편화란 메모리 상에서 적재, 해제되는 과정에서 발생하는 메모리 사이의 사용하지 못할 정도의 작은 빈 공간이다. 내부 단편화란 분할된 영역이 할당될 프로그램의 크기보다 큰 경우 발생, 외부 단편화란 분할된 영역이 할당될 프로그램보다 작아서 사용하지 않고 남은 경우 발생.
주 기억장치 할당 기법
프로그램이나 데이터를 실행시키기 전에 주 기억장치에 어떻게 할당할 것인지에 대한 내용으로 연속 할당 기법과 분산 할당 기법이 있다.
- 연속 할당 기법: 프로그램을 주 기억장치에 연속으로 할당하는 기법으로 단일 분할 할당(오버레이, 스와핑), 다중 분할 할당(고정, 동적 분할 할당)이 있다.
- 분산 할당 기법: 프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에서 분산하여 할당하는 기법으로 페이징, 세그먼테이션 기법이 있다.
단일 분할 할당 기법
주 기억장치를 운영체제 영역과 사용자 영역으로 나누어 한 순간에 오직 한 명의 사용자만이 주 기억장치의 사용자 영역을 사용하는 기법이다.
오버레이 기법
주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법. 보조기억장치에 저장된 하나의 프로그램을 여러 개의 조각으로 분할할 후, 필요한 조각을 차례로 주기억장치에 적재하여 프로그램을 실행한다. 만약 주기억장치의 공간이 부족한 경우, 프로그램의 조각을 중접해서 적재한다.
스와핑 기법
하나의 프로그램 전체를 주 기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법.
다중 분할 할당 기법
고정 분할 할당 기법(MFT)
정적 할당이라고도 하며, 프로그램을 할당하기 전에 운영체제가 주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비 중인 프로그램을 각 영역에 할당하여 수행하는 기법. 프로그램을 실행하려면 프로그램 전체가 주기억장치에 위치해야 한다. 단편화로 인해 메모리 낭비가 많다.
동적 분할 할당 기법(MVT)
단편화를 줄이기 위한 방법으로 미리 주기억장치를 분할해 놓는 것이 아니라 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분할하는 기법. 효율적인 사용과 프로세스 크기에 대한 제약이 적다.
가상기억장치 구현 기법
보조기억장치의 일부를 주기억장치처럼 사용하는 것. 주 기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용된다.
가상기억장치에 저장된 프로그램을 실행하려면 가상기억장치의 주소를 주기억장치의 주소로 바꾸는 주소변환 작업이 필요하다.
페이징 기법
가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후, 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역에 적재시켜 실행하는 기법. 주소변환을 위한 페이지 맵 테이블이 필요하다.
내부 단편화는 발생할 수 있다.
세그멘테이션 기법
가상기억장치에 보관된 프로그램을 다양한 크기의 논리적인 단위로 나눈 후, 주기억장치에 적재시켜 실행시키는 기법. 이를 이용하는 궁극적인 이유는 기억공간을 절약하기 위해서다. 마찬가지로 주소변환을 위한 세그먼트 맵 테이블이 필요하다. 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며, 이를 위해 기억장치 보호키가 필요하다.
외부 단편화는 발생할 수 있다.
페이지 교체 알고리즘
페이지 부재(Page Fault)가 발생했을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재할 때, 주기억장치에 있는 페이지 프레임 중 어떤 것을 선택해서 교체할지 결정하는 알고리즘이다.
- FIFO: 먼저 들어온 페이지를 먼저 교체.
- OPT: 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체.
- LRU: 최근에 가장 오랫동안 사용하지 않은 페이지를 교체.
- LFU: 가장 덜 사용된 페이지를 교체.
- MFU: 가장 많이 사용된 페이지를 교체.
기타 관리 사항
Locality
프로세스가 실행되는 동안 주 기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 았다는 이론.
스래싱을 방지하기 위한 워킹 셋 이론의 기반.
프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 시간 구역성과 공간 구역성이 있다.
워킹 셋
프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합이다. 페이지 부재나 교체 현상이 줄어들어 기억장치 사용이 안정된다. 때에 따라 워킹 셋을 변경된다.
프리페이징
처음에 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 페이지를 모두 페이지 프레임에 적재하는 기법.
스래싱
프로세스의 처리 시간보다 페이지 교체에 소모되는 시간이 많아지는 현상.
방지 방법으로는 워킹 셋 유지, 페이지 부재 빈도 조절, 부족한 자원 증설 및 프로세스 중단 등이 있다.
'Small talk > 면접 준비' 카테고리의 다른 글
[Java] 신입 개발자의 면접 준비 (0) | 2021.04.12 |
---|---|
신입 개발자 직무면접 정리 - 알고리즘편 (0) | 2020.10.06 |
신입 개발자 직무면접 준비 - DB편 (0) | 2020.10.05 |
신입 개발자 직무면접 준비 - 웹과 통신 (0) | 2020.10.05 |
신입 개발자 직무면접 정리 - Java편 (0) | 2020.10.02 |