OS(Operating System, 운영체제)
https://hoons-dev.tistory.com/95
내용 추가하기
운영체제
운영체제란?
사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어.
최근에는 가상화 기술의 발전으로 실제 하드웨어가 아닌 하이퍼바이저(가상 머신) 위에서 실행되기도 함.
커널이란?
....
운영체제의 역할
1. 자원관리
2. 메모리 관리
3. 프로세스 관리
4. 디스크 및 파일 시스템 관리
5. 입출력 관리
6. 사용자 인터페이스
7. 네트워킹
8. 오류 처리
9. 시스템 보안
Process and Thread
프로세스와 스레드의 차이
프로세스
실행 중인 프로그램.
완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않는다. 프로세스는 최소 1개의 스레드(메인 스레드)를 가지고 있다.
PCB
스레드
프로세스의 실행 단위.
프로세스 내에서 Stack만 따로 할당받고, 그 이외의 메모리 영역(Code, Data, Heap)을 공유하기 때문에 다른 스레드의 실행 결과를 즉시 확인할 수 있다. 스레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행된다.
데드락이란?
교착상태 / 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황.
멀티 스레드
멀티 프로세스와 멀티 스레드
멀티 프로세스
하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점,
멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점.
멀티 스레드
멀티 프로세스보다 적은 메모리 공간, 문맥 전환 빠름
서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 하나의 스레드에 문제가 생기면 전체 스레드가 영향을 받는 동기화 문제
멀티 스레드의 동시성과 병렬성
동시성
멀티 작업을 위해 싱글 코어에서 여러 개의 스레드가 번갈아 실행하는 것(동시에 실행하는 것처럼 보이지만 사실은 번갈아가며 실행됨).
병렬성
멀티 작업을 위해 멀티 코어에서 한 개 이상의 스레드를 포함하는 각 코어들을 동시에 실행하는 것.
멀티 스레드 환경에서의 주의사항
다수의 스레드가 공유 데이터에 동시에 접근하는 경우에 상호배제 또는 동기화 기법을 통해 동시성 문제 또는 교착상태에 빠지지 않도록 주의해야 함.
Context Switching(컨텍스트 스위칭)이란?
멀티 프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터값(Context)을 교체하는 작업.
* Context : CPU가 해당 프로세스를 실행하기 위한 프로세스의 정보들
CPU 스케쥴러
싱글 태스킹 운영체제는 한 번에 하나의 프로그램만 실행할 수 있으나 멀티 태스킹 운영체제는 CPU 이용률을 극대화하기 위해 하나 이상의 프로그램이 동시에 실행할 수 있게 한다. 멀티 태스킹의 경우 선점형과 비선점형이 있다.
스케줄링 대상은 Ready Queue에 있는 Processes.
선점형 스케줄링과 비선점형 스케줄링
선점형 스케줄링(Preemptive)
실행되고 있는 프로세스나 스레드를 강제로 중단시키고 다른 프로세스를 실행시키는 것.
잦은 문맥 교환으로 오버헤드(overhead)가 커질 수 있다.
비선점형 스케줄링(Non-preemptive)
하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없는 것.
필요한 문맥 교환만 일어나므로 오버헤드가 상대적으로 적지만, 프로세스의 배치에 따라 효율성 차이가 많이 난다.
스케줄링 방식
FCFS(First Come First Served)
- 가장 먼저 요청한 프로세스에 CPU를 할당해주는 방식.
- 비선점형 스케줄링
- 콘보이 현상
SJF(Shortest Job First)
- burst time 길이를 고려해서 스케줄링 결정
- 비선점형, 선점형 모두 존재
- 평균 대기 시간 줄일 수 있음
- 다음 프로세스의 CPU burst time을 예측하기 어려움
SRTF(Shortest Remaining Time First)
- SJF의 선점형 스케줄링 방식
- 현재 실행되고 있는 프로세스의 남은 시간보다 다음 프로세스가 더 빨리 끝날 수 있는 프로세스라면 다음 프로세스 실행.
Priority Scheduling
- 각 프로세스에 우선순위가 부여되어 있고, 이 우선순위에 따라 CPU를 할당하는 스케줄링 방식.
- 선점형, 비선점형 모두 존재
- 기아(Starvation) 문제 발생 가능(낮은 우선순위의 프로세스가 절대 실행되지 않는 문제) => 노화(aging)을 사용해 해결 가능
RR(Round Robin)
- 각 프로세스에 동일한 CPU 시간을 할당해서 해당 시간만 CPU를 이용하게 하는 방식 => 선점형
- 응답시간을 빠르게 할 수 있는 장점
- 할당 시간이 커지면 FCFS 처럼 작동
Convoy Effect(콘보이 현상)
콘보이 현상이란?
작업 시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스들의 실행시간이 전부 늦춰져 효율성을 떨어뜨리는 현상.
콘보이 현상이 발생되는 CPU 스케줄러 알고리즘
FCFS(First Come First Served) 스케줄링은 비선점형으로, 순차적으로 먼저 큐에 들어온 작업부터 실행하므로 콘보이 현상이 발생할 수 있다.
Sync and Async
동기는 순차적, 직렬적으로 태스크를 수행하고, 비동기는 병렬적으로 태스크를 수행한다.
ex) 빨래, 설거지, 청소
예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 작업을 할 때
동기는 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 태스크들은 블로킹(Blocking, 작업중단)된다.
비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 태스크를 계속해 수행한다.
프로세스 동기화
Critical Section(임계영역)이란?
임계 영역이란 프로세스 간에 공유 자원을 접근하는 데 있어 문제가 발생하지 않도록 한 번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역.
멀티 스레딩의 문제점에서 나오듯이 동일한 자원을 동시에 접근하는 작업(e.g. 공유하는 변수 사용, 동일 파일 사용)을 실행하는 코드 영역.
뮤텍스와 세마포어?
...
가상 메모리
페이지 교체 알고리즘
페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 때(페이지 부재), 어떤 페이지 프로임을 선택해 교체할 것인지 결정하는 방법
FIFO(First In First Out)
가장 간단한 알고리즘으로, 메모리에 올라온 지 가장 오래된 페이지를 교체하는 알고리즘. 페이지가 올라온 순서를 큐에 저장.
최적(Optimal) 페이지 교체
앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 알고리즘. 선행 조건으로 프로세스가 앞으로 사용할 페이지를 미리 알아야 하는 것이 있다. 이 조건은 실제 활용에서 알아낼 방법이 없기 때문에 최적 알고리즘은 구현이 불가능한 알고리즘이다. 때문에 연구를 목적으로 사용된다.
LRU(Last Recently Used)
가장 오래 사용되지 않은 페이지를 교체하는 알고리즘. OPT 알고리즘과 비슷한 효과를 나타낼 수 있고, OPT 알고리즘보다 페이지 교체 횟수가 높지만 FIFO 알고리즘보다 효율적이다.
LFU(Least Frequently Used)
참조 횟수가 가장 적은 페이지를 교체하는 알고리즘. 만약 대상인 페이지가 여러 개일 경우, LRU 알고리즘을 따라 가장 오래 사용되지 않은 페이지로 교체한다. <-> MFU(Most Frequently Used)
LFU와 MFU는 실제 사용에 잘 쓰이지 않는다. 구현에 상당한 비용이 들고 최적 페이지 교체 정책을 LRU만큼 제대로 구현해내지 못하기 때문이다.
캐시의 지역성
...