-
[Chapter-2] 프로세스개발공부/OS 2024. 7. 21. 01:46
-이대 반효경 교수님 강의 기반으로 작성되었습니다-
프로세스 = 실행중인 프로그램
프로세스의 context
1. cpu 수행 상태를 나타내는 하드웨어 문맥
= 프로그램 카운터, 각종 레지스터
2.프로세스 실행 시 특정 주소를 가지게 됨
문맥을 알기 위해서는 pc(program counter) 가 주소공간을 어디를 읽고있나를 알아야 한다.
3.프로세스 관련 구조
pcb = process control block
kernel stack프로세스의 상태
1. running
cpu를 잡고 instruction을 수행중
2. ready
기다리는중(다른 조건 모두 만족)
3. blocked
cpu 줘도 실행이 안되는 상태
io같은 느린작업 처리 , 요청 이벤트를 만족하면 다시 ready
4. new = 생성중
5. terminated =수행 완료6. suspended
외부적인 이유로 프로세스가 수행이 정지 된 상태
프로세스는 통째로 디스크에서 swap out( =메모리 날리기)++ Suspended blocked, Suspended ready 등 suspended 된 프로세스들의 memory image는 특별한 파일 시스템의 형태로 swap device에 저장된다.
외부에서 다시 resume해 주어야 액티브
각 프로세스들은
ready queue에 있다가
다른 큐(disk io, 리소스(공유데이터), 키보드 io...)에 잔류
==> blocked상태
운영체제에서
각 프로세스들을 관리하기 위해서 pcb를 저장해 놓음문맥교환(context switch)
= cpu를 한 프로세스 에서 다른 프로세스로 넘겨주는 과정
문맥 교환시 현재 cpu에서 실행되고 있던 레지스터에 저장되어 있던 값을 그 프로세스의 pcb 에 저장을 해놓음
메모리 맵도 세이브
그다음 프로세스를 실행 시킬 때에도 pcb에서 문맥을 읽은후 cpu에서 실행을 시켜줍니다.
++ systemcall, interrupt 둘다 반드시 문맥교환이 일어나는건 아니다.
문맥 교환은 a =(인터럽트or 시스템콜)> 커널 => a에서는 안일어 나고 (문맥교환은 일어나지 않아도 a의 내용은 어느정도 save)
a =(타이머 인터럽트, io요청)> 커널 => b에서는 일어납니다.프로세스 스케줄링을 위한 큐
job que : 시스템 내 모든 프로세스
ready que : 메모리 내부, cpu를 잡아서 실행대기
device que : io 디바이스 처리 프로세스 집합스케줄러
longterm 스케줄러 (job 스케줄러)
시작 ps중에 어떤것들을 ready큐에 보낼지
프로세스에 메모리를 주는 문제
메모리에 올라가 있는 프로세서의 수(degree of multiprogramming, 중요하다하네요)
time sharing system에는 롱텀이 없다는데요
short-term 스케줄러
cpu
밀리세컨드 단위
어떤 프로세서를 cpu에 줄지 결정
medium term 스케줄러 (or swapper)
메모리에 너무 많은 프로세스가 올라가는 문제
스와퍼가 통째로 쫓아냄 ==> degree of multiprogramming[동기식 비동기식 부연설명]
동기식은 cpu가 그 프로세스를 io입출력을 잡고있냐 안 잡고있냐의 문제
'해당 프로세스' 가 io입출력이 완료가 되어야 뭘 할수있음 ==> 동기식
알바아님 ==> 비 동기식Thread
프로세스는 code data stack 이 만들어지고
메모리의 어느 부분이 실행되고 있는지 프로그램 카운터가 가르키고 있음(pcb에 모든 내용이 있다.)쓰레드의 개념은 프로세스는 하나만 띄워놓고 cpu수행 단위만 여러개 ==> 쓰레드라고 한다.
쓰레드에는 그 프로세스의 어디부분을 실행하고있는지 알기위해
프로그램 카운터가 필요, 그 cpu가 실행되면서 메모리의 레지스터값이 세팅
(pc랑 reg값은 별도로 가진다)
자원들도 공유한다는 말이다.여기서 1,3,4를 공유
쓰레드는 cpu를 수행하는 단위이다.
쓰레드의 구성은
1. 프로그램 카운터
2. 레지스터 셋
3. 스택 스페이스
쓰레드가 공유하는 부분 = task
1. 코드
2. 데이터
3. os자원
light weight ps는 여러개의 쓰레드를 가지는 ps
heavy weight ps는 하나의 쓰레드만 가지는 ps쓰레드의 장점
쓰레드의 장점 ==> 정확히는 멀티 쓰레딩의 장점
1. 쓰레드 하나가 blocked 상태일때 다른 쓰레드가 cpu를 잡고 running 가능 ==> 빠른응답(웹브라우저 로딩..)2. 자원 절약(공유)
3. 협력해서 쓰루풋을 높일 수 있다.
4. 병렬성
프로세스를 만드는데에는 오버헤드가 큰데 쓰레드는 별로 안큼cpu가 여러개일 경우 각각의 쓰레드가 병렬적으로 일을 할 수 있음
쓰레드 implementation
커널 쓰레드 : 쓰레드가 여러개인 사실을 운영체제 커널이 알고있음
유저 쓰레드 : 라이브러리를 통해서 지원, 커널이 모르고 있음 제약이 있을 수 있음'개발공부 > OS' 카테고리의 다른 글
[Chapter-5] Process Synchronization (0) 2024.08.04 [Chapter-4] cpu 스케줄링 (1) 2024.07.21 [Chapter-3] 프로세스 관리 (0) 2024.07.21 [Chapter-1] 시스템 구조 (0) 2024.07.20 [Chapter-0] Intro (0) 2024.07.19