
ref :
https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/
https://devkoboso.com/217
기억장치
- 레지스터(
Register)
CPU내에 존재한고속 메모리- 캐시 메모리(
Cache Memory)
CPU의 레지스터와주 기억장치의속도차이를 해결하기 위한중간 메모리- 주 기억장치(
Main Memory)
CPU가 직접 데이터를 읽고 쓸 수 있는 장치- Ex)
RAM/ROM- 보조 기억장치(
Sub Memory)
CPU가 직접 접근할 수 없고접근 시간이 느리지만,대용량인 기억장치- Ex)
HDD/SSD등등
프로세스가 OS로부터 할당받는 RAM의 구조
프로그램이 실행되기 위해메모리에 로드되어야 한다. 따라서 OS에서 프로그램의 실행을 위한메모리 공간을분리해서 제공한다
- 구성
코드(Code)
: 실행 할프로그램의 코드가저장되는 텍스트 영역데이터(Data)
:전역변수&정적변수가 저장되는 영역스택(Stack)
:함수의 호출과 관련된 영역 (지역변수&매개변수)힙(Heap)
:사용자가 직접 동적으로할당하고해제할 수 있는 영역
[ 프로세스 ]
- 정의 :
컴퓨터에서실행되고 있는 프로그램을 의미- 특징
- 각각
독립된 메모리 영역(Code,Data,Stack,Heap)을 할당 받음- 기본적으로
최소 1개의 스레드를 가짐- 각 프로세스는
별도의 주소 공간에서 실행,다른 프로세스의변수나자료구조에접근 X프로세스간 자원에 접근하려면IPC(Inter Process Communication)을 사용해야 함
[ 스레드 ]
- 정의 :
CPU 사용의기본 단위이며,프로세스 내에 실행되는 여러 흐름의 단위- 특징
메모리에서Stack 영역만따로 할당받고Code, Data,Heap 영역은 공유같은 프로세스 내에 있는자원을 공유각 스레드는 별도의레지스터와스택을 가지지만,Heap메모리는서로 읽고 쓸수 있음
- 장점
프로세스보다생성 및 종료 시간, 스레드 전환시간이짧다- 같은 프로세스 내
자원을 공유하므로커널의 도움 없이 상호간의 통신이 가능
[ 프로세스 vs 스레드 ]
프로세스는OS로부터자원을 할당받는 작업의 단위스레드는프로세스가할당받은 자원을 이용하는 실행의 단위
프로세스는OS로부터메모리, 주소,등을할당받아독립적으로 사용같은 프로세스내스레드는할당받은 자원들을 공유
[ 멀티 스레딩(Multi-threading) ]
- 설명 :
하나의 프로세스를다수의 스레드로 만들어실행하는 것- 장점
프로세스 내에서스레드는자원을 공유하기 때문에자원의 생성과관리의중복이 없다- 단점
교착상태를 발생시킬 수 있음
:스레드 간 자원을 공유하기 때문에프로그래머가 신경써야 한다동기화에 주의해야 함
:공유자원에 해당하지 않는 것 까지 동기화를 통해작업 처리 순서를 컨트롤하면락을 획득한 스레드가종료하기 전까지 대기해야하므로병목현상이 발생할 수 있음
(멀티 프로세스 대신) 멀티 스레딩을 사용하는 이유
자원의 효율성 증대
- 프로세스를 생성하고 자원을 할당하는
시스템 콜이줄어들어효율적으로 관리가능
(프로세스간Context Switching시 RAM과 CPU사이에캐시 메모리까지초기화되어서오버헤드가 크다)스레드는 프로세스 내의 자원을 공유하기 때문에독립된 프로세스와 달리 스레드간데이터를 주고 받는 것이 간단하며,시스템 자원 소모가 줄어든다처리 비용 감소및응답 시간 단축
프로세스간 통신(IPC)보다스레드 간의 통신비용이 더 적어서통신 부담이 적다프로세스간 문맥교환보다스레드 간 문맥 교환비용이 적다(캐시를 비울 필요가 없어서)
- 프로세스 동기화
하나의 자원을한 순간에하나의 프로세스만이이용하도록순서를 제어하는 것- 스레드 동기화
하나의 코드블록또는메소드를하나의 스레드만이이용하도록순서를 제어하는 것
- 동기화를 하기 위한 방법
- 뮤텍스(
Mutex)- 세마포어(
Semaphore)
- 설명 :
두개 이상의프로세스나스레드가자원을 보유한 채서로 자원을 기다려서무한히 대기가 발생하는 것
- 발생
필요 조건
상호배제(Mutual Exclusion)
:한 자원에 대한여러 프로세스의 동시 접근을 막는 것점유대기(Hold and Wait)
:하나의 자원을 소유하고다른 프로세스혹은스레드의자원을 요청비선점(Non preemptive)
:다른 프로세스에 자원을 사용하는 동안강제로 가져올 수 없는 것순환대기(Circle wait)
: 각 프로세스가다음 프로세스가 요구하는 자원을 가지고 있는 것
(A->B, B->C, C->A)
- 해결 방법
예방(Prevention)
: 발생 필요 조건4가지중하나를 해결하여예방하는 것회피(Avoidance)
: 발생하지 않도록 알고리즘을 설계하여 피하는 것
ex)은행원 알고리즘
자원을 할당한 후에도안정 상태로 남는지사전에 검사하여교착상태를회피하는 방법탐지(Detection) & 복구(Recovery)
: 자원 할당 그래프를모니터링하며교착상태를 탐지하는 방식 &
교착상태가 탐지되면 걸린 상태에서복구를 시행함
ex)프로세스 중단/자원 선점/
개념
뮤텍스와세마포어는여러 프로세스나 스레드가공유 자원에접근하는 것을막기 위한 방법- 즉,
병행 처리를 위한프로세스 동기화 기법
- 뮤텍스(
Mutex)
오직 1개의 프로세스(혹은 스레드)만공유 자원에접근할 수 있도록 제어하는 것Lock / UnLock을사용해서 구현
- 세마포어(
Semaphore)
세마포어 변수를 통해여러 공유 자원들에 대해,하나에 자원에프로세스(혹은 스레드)가접근할 수 있도록제어하는 것
- 차이점
뮤텍스는하나의 동기화 대상(하나의스레드나프로세스)이자원을 소유할 수 있도록 하는 것
-->동기화 대상이 반드시하나세마포어는세마포어 변수만큼의자원과 다수의프로세스나스레드가 있을 때, 결국하나의 자원을하나의 프로세스혹은스레드가사용하게 하는 것
-->동기화 대상(프로세스)이다수가 될 수 있음
(0 또는 1값만 가지는 세마포어를이진 세마포어라고 하며, 이는뮤텍스와 비슷하게 수행)
기아현상
:프로세스의우선순위가 낮아서원하는자원을 계속할당받지 못하는 상태에이징
:기아현상을 방지하기 위한 기술로.시간에 비례하여 우선순위를 높혀자원을 할당받게 하는 기법
ref :
https://user-images.githubusercontent.com/34755287/54821888-d9191700-4ce6-11e9-8b11-7af6fdbcbe06.png
가상 메모리
가상 메모리
:주기억장치(RAM)에할당할 수 있는 용량은한정적이므로보조기억장치의 일부를주 기억장치처럼 사용해서더 큰 크기의 프로그램을실행하는 방법
페이징
- 설명
:가상메모리와주기억장치를 각각동일한 크기로분할하는가상 메모리 관리 기법
(가상메모리를 분할한 것 = 페이지,주기억장치를 분할한 것 = 프레임)
(내부 단편화가 발생/할당받은 영역이프로세스보다 커서 할당 후 남는 영역)
- MMU와 페이지 테이블
실제 주소와가상 주소를매핑하기 위해MMU을 통해페이지 테이블사용
(CPU는MMU(Memory Management Unit)를 통해흩어진 프로세스의 정보에접근할 수 있는 것)
- 보호(
Protection)와 공유(Sharing)
- 보호
모든 주소는페이지 테이블을 경유하므로페이지 테이블에서보호 기능을 수행- r(
read) / w(write) / x(execute) 비트를 두어해당 될때만 수행할 수 있게 설계페이징은고정된 크기로 분할하기 때문에,중요한 내용과중요하지 않은 내용이섞일 수 있음- 공유
고정된 크기로분할해서메모리 영역(Stack/Data/Code)이 섞여서해당 경우를 생각해가면서공유를 수행해야 한다 -->세그먼테이션보다복잡
세그먼테이션
- 설명
:가상메모리의 크기를가변적인 크기의 블록으로 편성하여 운용하는 메모리 관리 기법
(외부 단편화가 발생 /메모리 크기가프로세스보다 작아서아예 할당되지 않는 영역)
- MMU와 세그먼트 테이블
- 역시,
실제 주소와가상 주소를매핑하기 위해MMU를 통해세그먼트 테이블사용
- 보호(
Protection)와 공유(Sharing)
- 보호
모든 주소는세그먼트 테이블을경유하므로,세그먼트 테이블에서보호 기능을 수행- r(
read) / w(write) / x(execute) 비트를 두어해당 될때만 수행할 수 있게 설계세그먼트는논리적이며 가변적인 단위로 분할하기 때문에,중요한 내용과중요하지 않은 내용이섞일 일이 없음-->페이징보다 보호가 뛰어남- 공유
가변적인 크기로 분할해서메모리 영역(Stack/Data/Code)이 섞이지 않아서고려하지 않고 편하게 공유할 수 있음 -->페이징보다 공유가 뛰어남
페이징과 세그먼트 비교
- 둘 다
MMU를 통해각자의 테이블을 만들어서가상 주소와실제 주소를매핑한다보호과공유측면에서는세그먼테이션이 더 효율적이다세그먼테이션은치명적인 단점이 존재해서 현재페이징을 일반적으로 사용한다
프로세스가 아예 들어가지 못하는외부 단편화의오버헤드가 매우 크기 때문!
설명
가상 메모리를관리하는 기법인페이징기법에 반드시 필요한 부분현재 할당된 페이지중어떤 페이지를교체해야 하는지결정하는 방법
종류
- FIFO(
First In First Out)
가장 먼저 들어온 페이지를선택하는 방법
- LRU(
Least Recently Used)
최근에 가장 오랫동안 사용하지 않은 페이지를교체하는 기법
- LFU(
Least Frequently Used)
총 사용 빈도가 가장 적은 페이지를교체하는 기법
- OPT(
Optimal)
가장 효율적인 페이지 교체 알고리즘가장 오랫동안 사용되지 않을 페이지를선택하는 기법
- NUR(
Not Used Recently)
LRU와동일하게최근에 사용하지 않은 페이지를교체참조비트/변형비트를 통해LRU의 오버헤드를 줄인 방법
- 참조비트 :
페이지가 호출되면1, 아니면0- 변형비트 :
페이지 내용이 변경되면1, 아니면0
추가
- Thrashing(
쓰레싱)
Page Fault가연속적으로 발생해서프로세스 수행시간보다페이지 교체 시간이더 많은 상태- 해결 방법 :
다중 프로그래밍 정도를낮춰야 함
[ 인터럽트 란? ]
CPU가프로그램을 실행하고 있을 때,입출력 하드웨어 등의 장치나예외상황이 발생하여처리가 필요할 경우에CPU에게 알려주는 것
[ 인터럽트 종류 ]
- 외부 인터럽트
입출력 인터럽트하드웨어적 문제발생- 등등
- 내부 인터럽트
잘못된 명령/데이터를사용할 때 발생- 등등
- 소프트웨어 인터럽트
System Call발생- 등등
[ 인터럽트 발생 처리 과정 ]
주 프로그램이 실행되다가인터럽트가 발생현재 수행중인 프로그램을멈추고,상태 레지스터와PC등을스택에 잠시 저장한 뒤인터럽트 서비스 루틴으로 이동인터럽트로 요청된 작업을수행- 다시 돌아가서
스택에 저장한 정보를 꺼낸 뒤수행 시작
[ 인터럽트 vs 폴링 ]
- 폴링(
Pooling) ?
특정한 어떤 일을 할 시기를알기 위해계속 체크하는 방식
CPU가입력을 받아들이는 방법2가지차이점
인터럽트 방식
- 장점 :
인터럽트가 발생시에만 처리를 하기때문에시스템 부하가 적다/유연하다- 단점 :
구현이 어렵다폴링 방식
- 장점 :
구현이 쉽다- 단점 :
특정 주기마다 확인해야 하기에시스템의 리소스를 많이 사용
[ 개념 ]
운영체제는기능을 제한하여보안을 하기 위해커널모드(Kernel Mode)/사용자 모드(User Mode)로 나뉘어 구동한다.시스템 콜은 이러한커널 영역의 기능을사용자 모드에서 사용 하기 위한 일종의인터페이스
[ 분류 ]
- 프로세스 제어(
Process Control)- 파일 조작(
File Manipulation)- 장치 관리(
Device Management)- 정보 유지(
Information manitenance)- 통신(
Communication)
[ 예시 -프로세스 제어 ]
fork
Process생성과제어를 위한System call새로운 프로세스(자식 프로세스)를만드는 것PCB/프로세스 메모리 구조등이복사됨부모 프로세스의fork가 호출된다음부터 실행이 된다
exec
Process생성과제어를 위한System call프로세스를새로운 것으로 덮어서 실행시켜 버리는 것새로운 메모리를할당하지 않고현재 프로세스에 덮어 씌우는 것
[ PCB ]
설명
Process Control Block의 약자프로세스에 대한 정보인Process Metadata를저장하는 곳커널 내에 있는 하나의자료구조Linked List로관리되어삽입/삭제가용이함- Process Metadata
Process IDProcess StateProcess PriorityCPU Usage등
PCB가 필요한 이유 ?
PCB가 필요한 이유 ?
CPU는 프로세스가여러개일 때,CPU 스케줄링을 통해프로세스를관리- 이 때
CPU가각 프로세스의 정보를 알기 위해PCB가 필요
프로그램 실행하면 ?
- 프로그램을 실행하면 ?
프로그램 실행프로세스 생성프로세스 주소 공간(코드/데이터/스택) 할당프로세스의메타데이터가PCB에 저장되어커널 영역에 생김
[ Context Switching ]
설명
문맥교환이라고도 함스케줄링에 따라실행중인 프로세스를교체할 때,교체되는 프로세스의 상태를기억시켜 두고,새로운 프로세스의 상태를처리기에 넘겨주는일련의 작업을 의미CPU가이전 프로세스 상태를PCB에 보관하고,다음 프로세스의 정보를PCB로 부터 읽어레지스터에 적재CPU가수행중인 프로세스를변경할 때,CPU의 레지스터 정보가변경되는 것인터럽트 처리를수행하기 전에발생- 실제로
프로세스를Ready-->Running로상태 전환하는 과정은디스패처(Dispatcher)에 의해 수행되며, 이 과정을디스패치(Dispatch)라고 한다
(Context Switching 과정에디스패치 과정이포함된 구조)
문맥 교환 발생 & 미발생
Context Switching이발생하는 경우
대기 Queue에 있는프로세스가CPU할당받아실행상태로 갈 때Time Interrupt가 발생I/O요청 System Call
- (주의!)
Context Switching이아닌 경우
: 두 경우 모두운영체제가커널 모드로 바뀌어서 실행될 뿐CPU를점유하는 프로세스가다른 프로세스로변경되지 않음, 다시 돌아와서작업을 이어나감!
Time interrupt를제외한 interruptI/O System Call을제외한 system call
문맥 교환 오버헤드 ?
문맥교환이 발생할 때레지스터에새로운 PCB를 적재하는 과정동안CPU가 아무런 일도 할 수 없는데이 구간을문맥교환의 오버헤드라고 함
문맥 교환 오버헤드 해결방안
- 프로그램 다중화 수준 낮춤
:다중 프로그래밍 수준을낮추어문맥 교환 발생 빈도를감소시킴- 스레드 이용
:Light weight 프로세스인스레드를사용해서문맥 교환 부하 최소화
[ 스케줄링 ]
개념
스케줄링이란프로세스들에게cpu 등의 자원 배정을 적절히 하여다중 프로그래밍을가능하게 하는운영체제의 동작 기법
종류
- 장기 스케줄링(Long-term scheduling)
어떤 프로세스가시스템의 자원을 차지할 수 있도록 할 것인가를결정하여프로세스를준비(ready)상태로 보내는 작업작업 스케줄러에 의해수행수행 빈도가적고 느리다
- 중기 스케줄링(middle-term scheduling)
장기 / 단기 스케줄러 사이에서완충 역할메모리에 적재된프로세스의 수를관리메모리 부족-->swap out/메모리 충분-->swap in
- 단기 스케줄링(short-term scheduling)
CPU 스케줄러/프로세서 스케줄러라고 불림- 실제로
CPU를어떤 프로세스에게 할당할 지 결정하는 역할자주 수행되고빠름문맥 교환(Context Switching)을수행
프로세스 상태
- 생성 :
프로세스가 생성되고 있는 상태- 준비 :
프로세스가프로세서에 의해수행되고 있지는 않지만,언제든지 사용할 수 있는 상태
준비상태 queue에서대기하는 상태- 실행 :
프로세서 스케줄러에 의해CPU가 할당되어실행되고 있는 상태- 대기 :
입출력과같은 인터럽트로 인해프로세스가 대기중인 상태- 종료 :
프로세스의 실행이 끝나서종료된 상태
[ CPU 스케줄링 ]
CPU 스케줄러(프로세서 스케줄러=단기 스케줄러)에 의해수행우선순위로 인해실행 중간에 CPU를 선점할 수 있는지 여부에 따라 크게2종류로 구분
- 선점 스케줄링 :
중간에 CPU 제어권을 뺏음- 비선점 스케줄링 :
중간에 CPU 제어권을 뺏지 않음
비선점(non-preemptive) 스케줄링
- FCFS(
First Come First Serve)
CPU에게 먼저 요청한 순서대로 CPU를 배정받는 스케줄링 기법
- SJF(
Short Job First)
CPU 요구량이 가장 적은 프로세스 부터 실행하는 스케줄링 기법
- HRN(
Hightest Response-ratio Next)
우선순위를 계산하여점유 불평등을 보완한 방법 (SJF의 단점 보완/기아현상 방지)우선순위=(대기시간 + 실행시간)/(실행시간)
선점(preemptive) 스케줄링
- Round Robin(
라운드 로빈)
FCFS 기반으로CPU를 할당하되,각 프로세스는한번에 쓸 수 있는 CPU 시간이 지나면시간 종료 인터럽트에 의해CPU를 선점당하는 스케줄링 기법할당 시간(Time Quantum)이길면FCFS와 같게 되고/짧으면잦은 문맥교환으로오버헤드가 증가
- SRT(
Shortest Remaining Time)
준비완료 큐에서CPU 요구량이 가장 짧은 것을 먼저 실행시킴 -->SJF와 동일- 하지만
중간에더 CPU 요구량이 적은 프로세스가 오면선점이 된다
- Multilevel-Queue(
다단계 큐)
각 큐는절대적인 우선순위를 가지며,높은 우선순위의 큐 부터 각자의 스케줄링 기법을 적용하여 진행하는 스케줄링 기법각 프로세스는종류와우선순위에 따라큐에 배정큐들 간에프로세스가 이동할 수 없어서스케줄링 부담은 적지만,유연성이 떨어짐
- Multilevel-Feedback-Queue(
다단계 피드백 큐)
프로세스들은각 큐 사이를 이동할 수 있어서우선순위가 낮은 프로세스도 실행될 수 있음각 큐간 프로세스가 이동하기 때문에MLQ보다유연한 수행 가능
개념
독립적으로 실행되는프로세스 간통신을 하기 위한 것프로세스는커널이 제공하는IPC 설비를이용해프로세스 간 통신을 할 수 있음IPC통신에서프로세스 간데이터를 동기화하고보호하기 위해서세마포어와뮤텍스를사용- 정말
다양한 종류가 있지만, 모두 알 필요는 없음
Pipe(익명 pipe)
파이프는두 개의 프로세스를연결하는데,하나의 프로세스는쓰기만하고다른 하나는읽기만 가능한쪽 방향으로만 통신이 가능한반이중 통신양쪽 모두 송/수신을 하려면2개의 파이프가 필요익명의 파이프는통신할 프로세스를명확히 알 수 있는 경우에 사용 (부모-자식 프로세스 간 통신)
Named Pipe(FIFO)
Named Pipe는전혀 모르는 상태의 프로세스들 사이 통신에 사용익명 Pipe의확장된 상태로부모 프로세스와무관한 다른 프로세스와도 통신이 가능양쪽 모두 송/수신을 하는전이중 통신을 위해서는 역시2개의 파이프가 필요
Message Queue
입출력 방식은Named Pipe와 동일파이프는데이터 흐름일 뿐인데,Message Queue는메모리 공간을 가짐메시지에데이터를 담은 후번호(식별자)를 붙이기 때문에,전역으로 관리되는하나의 큐를 통해서여러 프로세스가동시에 데이터를 주고 받을 수있음
Shared Memory(공유 메모리)
파이프,메시지 큐가통신을 위한 설비라면,공유 메모리는데이터 자체를 공유하도록 지원하는 설비프로세스간메모리 영역을 공유해서같이 사용할 수 있도록 허용하는 것프로스세가공유 메모리 할당을커널에요청
-->커널은해당 프로세스에메모리 공간 할당
-->모든 프로세스는해당 메모리 영역에접근 가능중개자 없이 곧바로 메모리에 접근하여IPC중에가장 빠르게 동작
Memory mapped file(메모리 맵)
공유 메모리처럼메모리를 공유하는 방식열린 파일을메모리에 매핑시켜공유하는 방식대용량 데이터를 공유해야할 때 사용
Socket(소켓)
네트워크 소켓 통신을 통해데이터 공유클라이언트와서버가소켓을 통해서 통신하는 구조원격에서프로세스 간 데이터를 공유할 때 사용서버(bind / listen / accept)/클라이언트(connect)
공유 자원에 대해여러 프로세스가동시에 접근할 때,결과값에 영향을 줄 수 있는 상태를race condition이라고 한다race condition이 발생하면프로세스에 원하는 결과가 발생하는 것을보장할 수 없다race condition문제를잘 해결하기 위해서는공유되는 영역인임계 영역(critical Section)의문제를 해결해야 한다
임계 영역(critical section) 문제를 해결하기 위한3가지 조건
- 상호 배제 (
Mutual exclution)
:하나의 프로세스가임계 영역에 들어가 있다면다른 프로세스는들어갈 수 없음- 진행 (
Progress)
:임계 영역에 들어가려는 프로세스가여러개일 때어느것이 들어갈 지 결정을 해야함- 한정 대기 (
Bounded waiting)
:기아현상을방지하기 위해한 번 임계구역에 들어간 프로세스는다음 번에 제한을 두어야 함
임계 영역의동시접근 문제를 해결하는 방법
- 락(
lock)- 세마포어(
semaphore)- 모니터(
monitor) 등