프로세스의 개념

프로세스
ㅡ> = 실행중인 프로그램
ㅡ> 문맥 : 프로세스의 현재 상태... 이 프로세스가 어디까지 와있는가... 어디까지 수행했는가....
문맥
ㅡ> 레지스터에 무슨값, PC는 어디를 가리키는가
ㅡ> 주소공간에 뭐가 채워졌는가
ㅡ> 커널의 상태... PCB(프로세스마다 커널호출하는 스택 각각 부여)
문맥을 왜 저장?
ㅡ> Time sharing으로 프로세스가 CPU를 계속 붙잡고 있지 않음
ㅡ> CPU를 넘겨줬다가 다시 받을 때, 현재 문맥을 알아야 거기서부터 다시 시작하기 때문에 필요
하드웨어 문맥
ㅡ> CPU의 수행 상태를 나타냄
ㅡ> Program Counter
ㅡ> 각종 Register
프로세스의 주소 공간
ㅡ> code, data, stack
프로세스 관련 커널 자료 구조
ㅡ> PCB
ㅡ> Kernel stack
프로세스의 상태(Process State)

레디
ㅡ> CPU이외의 조건은 다 만족된 상태 (준비완료)
ㅡ> 디스크에 있는 실행파일 메모리에 올라와있고 등등.. 준비완료
Blocked
ㅡ> CPU이외의 조건이 만족 안된 상태
ㅡ> I/O처럼 오래걸리는 작업 기다리는 상태
New
ㅡ> 프로세스 생성중인 상태
Terminated
ㅡ> 프로세스 종료중인 상태
Queue
공유데이터
ㅡ> 여러 프로세스가 공유데이터에 접근할 때
ㅡ> 동시에 접근하면 일관성문제 생길 수 있어서 접근을 막고 줄세워서 차례로 접근
놀이공원에서 놀이기구마다 줄서는 것과 비슷

이런 Queue들은 사실 커널 메모리의 data영역에 있음
프로세스 상태도

PCB (Process Control Block)

문맥 교환(Context Switch)

문맥 교환
ㅡ> 프로세스에서 다른 프로세스로 CPU 넘겨주는 과정
ㅡ> CPU를 잃는 프로세스의 문맥을 PCB의 저장
ㅡ> CPU를 얻는 프로세스의 문맥을 PCB에서 로드

사용자 프로세스가 바뀌어야 context switch고
커널에 넘겨주는건 context switch 아님
커널에 넘겨줄때도 PCB저장하긴 하는데, context switch때보단 오버헤드가 적음
(context switch때는 캐시 메모리 지워버림)
프로세스를 스케줄링하기 위한 큐

Ready Queue와 Device Queue

Ready 큐, 마그네틱 큐, 디스크 큐 등
프로세스 스케줄링 큐의 모습

fork a child는 자식 프로세스 생성
스케줄러 (Schedular)

장기 스케줄러
ㅡ> 어떤 프로세스를 레디큐에 올릴지 결정
ㅡ> degree of Multiprogramming(메모리에 올리는 프로세스의 수)를 제어
ㅡ> 현재 시스템엔 이거 없음, 그냥 전부 레디큐에 넣음 ▶ 대신 중기 스케줄러로 조정
프로세스를 너무 많이 올려놔도 안좋고 너무 적어도 안좋다
중기 스케줄러
ㅡ> 너무 많은 프로세스가 메모리에 올라와있으면 Swapper가 몇개를 쫓아낸다

중기 스케줄러 때문에 Suspended 상태 추가
I/O작업처럼 프로그램 본인의 문제가 아닌, 외부(중기 스케줄러, 사람 등)에서 정지시켜버린 상태

시스템콜 등으로 OS에 CPU 넘겨줬을때도 그 프로세스가 monitor mode에서 Running중이라고 간주한다

suspended blcoked 상태에서도 I/O작업같은 것이 진행중이었다면 suspended ready상태로 갈 수 있다
Thread

쓰레드
ㅡ> 프로세스 내부에 CPU 수행 단위가 여러개 있는 경우



동일한 역할을 수행하는 프로세스일 때, 메모리에 프로세스를 여러개 띄우지 않고,
하나의 프로세스만 올려놓고, 각각 다른부분의 코드를 실행하는게 쓰레드
즉, 하나만 올려놓고 공유할 수 있는 부분을 최대한 공유해서 메모리를 절약하는 것
code, data는 하나만 올려놓고
stack을 쓰레드마다 각각 따로 부여한다
PCB도 하나만 만들고,
PC와 레지스터만 쓰레드마다 따로 부여한다
공유x부분 = CPU수행과 관련된 부분
공유o부분 = task
heavyweight process
ㅡ> 쓰레드가 1개인 전통적인 개념의 task
lightweigt process
ㅡ> = 쓰레드
쓰레드의 장점


1. 응답시간 up
ㅡ> 네이버에 접속할 때, 웹페이지를 읽어오는 작업도 I/O작업이라, 웹 브라우저가 그동안 blocked상태가 된다
ㅡ> 웹브라우저를 여러개의 쓰레드로 만들면, 하나의 쓰레드가 웹페이지에서 이미지를 읽어오는 동안에, 다른 쓰레드가 텍스트라도 빨리 읽어와서 보여줄 수 있다 (비동기식 입출력)
2. 메모리 공간 절약
3. 처리율 (thoroughput)
ㅡ> 다중 스레드가 협력
4.. 병렬성
ㅡ> (CPU가 여러개 있는 경우만 해당, MP = MultiProcesser)
ㅡ> 1000x1000 행렬을 곱하는데, 각 행과 열의 곱셈을 독립적으로하고 합치면 된다
ㅡ> 스레드를 이용해 여러 CPU에서 병렬적으로 곱셈을 하고, 나중에 합친다
ㅁ 경제성 (Economy)
ㅡ> 프로세스를 새로 만드는 것보다, 스레드 만드는게 오버헤드가 적다
ㅡ> 프로세스간의 문맥교환보다 스레드간의 문맥교환이 오버헤드가 적다
Single and Multithreaded Processes

쓰레드의 구현

커널 스레드
ㅡ> 커널이 스레드 지원
ㅡ> 스레드가 여러개인 것을 OS가 알고있다
ㅡ> 스레드에서 다른 스레드로 넘어갈때도 커널이 CPU 스케줄링 하듯이 넘겨준다
유저 스레드
ㅡ> 라이브러리 형태로 구현
ㅡ> 스레드가 여러개인 것을 OS가 모르고있다
ㅡ> 유저 프로그램이 스스로 스레드를 여러개 관리. 커널의 지원을 받지 않아서 구현상 한계가 있을 수 있음
리얼타임 스레드도 존재
'CS > 운영체제' 카테고리의 다른 글
[반효경os] CPU Scheduling (1) | 2024.12.10 |
---|---|
[반효경os] Process Management (0) | 2024.12.09 |
[반os] 시스템구조 & 프로그램 실행 (1) | 2024.11.06 |
[반os] 운영체제란 무엇인가 (0) | 2024.11.04 |
[반os] 운영체제 - 강의소개 (3) | 2024.08.21 |
프로세스의 개념

프로세스
ㅡ> = 실행중인 프로그램
ㅡ> 문맥 : 프로세스의 현재 상태... 이 프로세스가 어디까지 와있는가... 어디까지 수행했는가....
문맥
ㅡ> 레지스터에 무슨값, PC는 어디를 가리키는가
ㅡ> 주소공간에 뭐가 채워졌는가
ㅡ> 커널의 상태... PCB(프로세스마다 커널호출하는 스택 각각 부여)
문맥을 왜 저장?
ㅡ> Time sharing으로 프로세스가 CPU를 계속 붙잡고 있지 않음
ㅡ> CPU를 넘겨줬다가 다시 받을 때, 현재 문맥을 알아야 거기서부터 다시 시작하기 때문에 필요
하드웨어 문맥
ㅡ> CPU의 수행 상태를 나타냄
ㅡ> Program Counter
ㅡ> 각종 Register
프로세스의 주소 공간
ㅡ> code, data, stack
프로세스 관련 커널 자료 구조
ㅡ> PCB
ㅡ> Kernel stack
프로세스의 상태(Process State)

레디
ㅡ> CPU이외의 조건은 다 만족된 상태 (준비완료)
ㅡ> 디스크에 있는 실행파일 메모리에 올라와있고 등등.. 준비완료
Blocked
ㅡ> CPU이외의 조건이 만족 안된 상태
ㅡ> I/O처럼 오래걸리는 작업 기다리는 상태
New
ㅡ> 프로세스 생성중인 상태
Terminated
ㅡ> 프로세스 종료중인 상태
Queue
공유데이터
ㅡ> 여러 프로세스가 공유데이터에 접근할 때
ㅡ> 동시에 접근하면 일관성문제 생길 수 있어서 접근을 막고 줄세워서 차례로 접근
놀이공원에서 놀이기구마다 줄서는 것과 비슷

이런 Queue들은 사실 커널 메모리의 data영역에 있음
프로세스 상태도

PCB (Process Control Block)

문맥 교환(Context Switch)

문맥 교환
ㅡ> 프로세스에서 다른 프로세스로 CPU 넘겨주는 과정
ㅡ> CPU를 잃는 프로세스의 문맥을 PCB의 저장
ㅡ> CPU를 얻는 프로세스의 문맥을 PCB에서 로드

사용자 프로세스가 바뀌어야 context switch고
커널에 넘겨주는건 context switch 아님
커널에 넘겨줄때도 PCB저장하긴 하는데, context switch때보단 오버헤드가 적음
(context switch때는 캐시 메모리 지워버림)
프로세스를 스케줄링하기 위한 큐

Ready Queue와 Device Queue

Ready 큐, 마그네틱 큐, 디스크 큐 등
프로세스 스케줄링 큐의 모습

fork a child는 자식 프로세스 생성
스케줄러 (Schedular)

장기 스케줄러
ㅡ> 어떤 프로세스를 레디큐에 올릴지 결정
ㅡ> degree of Multiprogramming(메모리에 올리는 프로세스의 수)를 제어
ㅡ> 현재 시스템엔 이거 없음, 그냥 전부 레디큐에 넣음 ▶ 대신 중기 스케줄러로 조정
프로세스를 너무 많이 올려놔도 안좋고 너무 적어도 안좋다
중기 스케줄러
ㅡ> 너무 많은 프로세스가 메모리에 올라와있으면 Swapper가 몇개를 쫓아낸다

중기 스케줄러 때문에 Suspended 상태 추가
I/O작업처럼 프로그램 본인의 문제가 아닌, 외부(중기 스케줄러, 사람 등)에서 정지시켜버린 상태

시스템콜 등으로 OS에 CPU 넘겨줬을때도 그 프로세스가 monitor mode에서 Running중이라고 간주한다

suspended blcoked 상태에서도 I/O작업같은 것이 진행중이었다면 suspended ready상태로 갈 수 있다
Thread

쓰레드
ㅡ> 프로세스 내부에 CPU 수행 단위가 여러개 있는 경우



동일한 역할을 수행하는 프로세스일 때, 메모리에 프로세스를 여러개 띄우지 않고,
하나의 프로세스만 올려놓고, 각각 다른부분의 코드를 실행하는게 쓰레드
즉, 하나만 올려놓고 공유할 수 있는 부분을 최대한 공유해서 메모리를 절약하는 것
code, data는 하나만 올려놓고
stack을 쓰레드마다 각각 따로 부여한다
PCB도 하나만 만들고,
PC와 레지스터만 쓰레드마다 따로 부여한다
공유x부분 = CPU수행과 관련된 부분
공유o부분 = task
heavyweight process
ㅡ> 쓰레드가 1개인 전통적인 개념의 task
lightweigt process
ㅡ> = 쓰레드
쓰레드의 장점


1. 응답시간 up
ㅡ> 네이버에 접속할 때, 웹페이지를 읽어오는 작업도 I/O작업이라, 웹 브라우저가 그동안 blocked상태가 된다
ㅡ> 웹브라우저를 여러개의 쓰레드로 만들면, 하나의 쓰레드가 웹페이지에서 이미지를 읽어오는 동안에, 다른 쓰레드가 텍스트라도 빨리 읽어와서 보여줄 수 있다 (비동기식 입출력)
2. 메모리 공간 절약
3. 처리율 (thoroughput)
ㅡ> 다중 스레드가 협력
4.. 병렬성
ㅡ> (CPU가 여러개 있는 경우만 해당, MP = MultiProcesser)
ㅡ> 1000x1000 행렬을 곱하는데, 각 행과 열의 곱셈을 독립적으로하고 합치면 된다
ㅡ> 스레드를 이용해 여러 CPU에서 병렬적으로 곱셈을 하고, 나중에 합친다
ㅁ 경제성 (Economy)
ㅡ> 프로세스를 새로 만드는 것보다, 스레드 만드는게 오버헤드가 적다
ㅡ> 프로세스간의 문맥교환보다 스레드간의 문맥교환이 오버헤드가 적다
Single and Multithreaded Processes

쓰레드의 구현

커널 스레드
ㅡ> 커널이 스레드 지원
ㅡ> 스레드가 여러개인 것을 OS가 알고있다
ㅡ> 스레드에서 다른 스레드로 넘어갈때도 커널이 CPU 스케줄링 하듯이 넘겨준다
유저 스레드
ㅡ> 라이브러리 형태로 구현
ㅡ> 스레드가 여러개인 것을 OS가 모르고있다
ㅡ> 유저 프로그램이 스스로 스레드를 여러개 관리. 커널의 지원을 받지 않아서 구현상 한계가 있을 수 있음
리얼타임 스레드도 존재
'CS > 운영체제' 카테고리의 다른 글
[반효경os] CPU Scheduling (1) | 2024.12.10 |
---|---|
[반효경os] Process Management (0) | 2024.12.09 |
[반os] 시스템구조 & 프로그램 실행 (1) | 2024.11.06 |
[반os] 운영체제란 무엇인가 (0) | 2024.11.04 |
[반os] 운영체제 - 강의소개 (3) | 2024.08.21 |