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 ID
Process State
Process Priority
CPU 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
를제외한 interrupt
I/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
) 등