Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 문제풀이
- 프로세스 동기화
- 리눅스
- 메모리의 불연속적 할당
- Segmentation with Paging
- 다단계 페이지 테이블
- 메모리 관리
- linux
- CS
- 운영체제
- annotation
- 2단계 Page Table
- jpa
- Inverted Page Table
- 코드스테이츠 백엔드 과정 39기
- 프로세스 불연속 할당
- 알고리즘
- Shared Page
- Allocation of Physical Memory
- springboot
- 자바 문제풀이
- 자바 알고리즘
- 스프링
- 웹 프로그래밍
- Effective Access Time
- 웹개발
- Page Table의 구현
- 프로세스 할당
- 스프링부트
- spring
Archives
- Today
- Total
GrowMe
[운영체제] 프로세스 본문
프로세스
# 프로세스의 개념
# 프로세스의 상태
# PCB
# 문맥교환
# 프로세스를 스케줄링하기 위한 큐
# 스케줄러
# Thread
✍️ 본 포스팅은 이화여자대학교 반효경 교수님의 "운영체제" 강의를 들으며 정리한 내용입니다.
*프로세스의 개념
- `실행중인 프로그램`을 의미
- 프로세스의 문맥
- 현재 CPU 수행 상태를 나타내는 하드웨어 문맥을 의미 : Program Counter / 각종 register
- 즉, 프로세스 현재 시점의 상태를 나타내기 위해 문맥을 사용
- 프로세스의 주소 공간 : code, data, stack
- 프로세스 관련 커널 자료 구조 : PCB(Process Control Block), Kernel stack
*프로세스의 상태
- 프로세스는 상태가 변경되며 수행된다
- Running : CPU를 잡고 instruction을 수행중인 상태
- Ready : CPU를 기다리는 상태(메모리 등 다른 모든 조건을 만족하고)
- Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(예 : I/O)가 즉시 만족되지 않아, 이를 기다리는 상태
- ex) 디스크에서 file을 읽어와야 하는 경우
- 자신이 요청한 event가 만족되면 Ready
- Suspended(stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out된다
- 예) 사용자가 프로그램 일시 정지시킨 경우, 시스템이 여러 이유로 프로세스를 잠시 중단 시킴
(메모리에 너무 많은 프로세스가 올라와 있을 떄) - 외부에서 resume해주어야 Active
- New : 프로세스가 생성중인 상태
- Terminated : 수행(execution)이 끝난 상태(아예끝나면 프로세스 자체가 아님. 수행이 끝나면 정리작업이 남아있는데, 그것을 진행중인 상태)
- 프로세스 상태도
- 프로세스의 상태
*Process Control Block (PCB)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보
- 다음의 구성 요소를 가진다(구조체로 유지)
- OS가 관리상 사용하는 정보
- Process state(ready, blocked, running), Process ID
- scheduling information, priority
- CPU 수행 관련 하드웨어 값 : Program counter, registers
- 메모리 관련 : Code, data, stack의 위치 정보
- 파일 관련 : Open file descriptors...
- OS가 관리상 사용하는 정보
*문맥 교환
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
- CPU를 빼앗겼다가 새로 얻었을때, 처음부터 다시하는게 아니라, 이미 저장된 내용을 기준으로 진행하는 목적
- System call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아님
- 즉, 운영체제로 CPU 제어권이 넘어갈 때, 문맥 교환이 일어나지 않고
- 운영체제로 넘어가고 나서, 다른 사용자 프로그램에 CPU 제어권을 내어주면, 그때 문맥 교환이 일어남
- 그림에서 (1)의 경우에도 CPU 수행 정보 등 프로세스 문맥의 일부를 PCB에 저장해야 하지
- 문맥교환을 하는 (2)의 경우 그 부담이 훨씬 크다(eg. cache memory flush)
*프로세스를 스케줄링하기 위한 큐
- Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready queue : 현재 메모리 내 있으면서 CPU를 잡아서 실행되기 기다리는 프로세스의 집합
- Device queues : I/O device의 처리를 기다리는 프로세스의 집합
- 프로세스들은 각 큐들을 오가며 수행된다
- Ready Queue와 다양한 Device Queue
- 프로세스 스케줄링 큐의 모습
*스케줄러
- 현재 시스템에서는 대체로 Short-Term Scheduler와 Medium-Term Scheduler를 합쳐서 많이 사용 중
- Long-Term Scheduler(장기 스케줄러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 어느 프로세스에 memory(및 각종 자원)을 줄 것인지 결정
- defree of Multiprogramming(메모리에 프로그램이 올라가는 수)을 제어
- time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)
- Short-Term Scheduler(단기 스케줄러 or CPU scheduler)
- 어떤 프로세스를 다음번에 running 시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야 함 (millisecond 단위)
- Medium-Term Scheduler(중기 스케줄러 or Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄
- 프로세스에게서 memory를 뺏어낸다
- degree of Multiprogramming을 제어
- 프로세스 상태도
- (주의) 프로그램이 Running 상태에서 시스템 콜을 통해 운영체제에
CPU 제어권을 넘겨주어도 그 프로그램은 monitor mode로 Running 상태임
*Thread
- Thread란 CPU를 구성하는 단위(== lightweight process)
- Thread의 구성 : thread 간 독립적으로 가지고 있는 것
- program counter
- register set
- stack space
- Thread가 동료 thread와 공유하는 부분(=task)
- code section
- data section
- OS resources
- 메모리 공간
- 전통적인 개념의 process인 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.
- 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked (waiting) 상태인 동안에도
동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리가 가능하다. - 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
- 스레드를 사용하면 병렬성을 높일 수 있다.
- ex) 만약웹페이지 여러개와 한글 프로그램 실행 시, 각각 별도의 프로세스의 단일 스레드로 처리하면
프로세스마다 각각 메모리를 차지하기에 메모리 낭비를 초래할 수 있다.
- 다중 Thread의 장점
- 빠른 응답성
ex) 이미지가 포함된 웹 페이지 불러올 시- 하나의 Thread만으로 처리하면 프로세스가 blocked되어 이미지 처리가 완료될 때까지 사용자가 기다려야함
- 다중 Thread로 처리 시, 한 Thread가 이미지 처리할 동안, Html파일을 우선 받아와서 사용자에게 먼저 보여줌
- 자원의 공유성
Thread들은 서로 code, data, 프로세스 메모리 공간을 공유하기에 자원을 효율적으로 사용할 수 있다. - 경제성(속도)
- 프로세스를 추가하거나 CPU 교환(문맥교환)하는 것보다 thread를 추가/Switching하는 것이 속도가 더 빠르다.
- Solaris 운영체제의 경우 위 두 경우 overhead가 각각 30배, 5배 속도 차이 발생
- CPU가 여러개 있는 아키텍처의 경우
프로세스가 하나라도 그 내부에 여러 쓰레드들이 있을 경우, 각각 다른 CPU를 통해 처리 가능 -> 더 빠른 결과물
*Thread의 구현
- Kernel Threads
- 쓰레드가 여러개 있다는 사실을 운영체제 커널이 알고 있음
- 한 쓰레드에서 다른 쓰레드로 CPU가 넘어가는 것도 커널이 CPU 스케줄링하듯이 넘겨준다
- 운영체제 예) Windows 95/98/NT, Solaris, Digital UNIX, Mach
- UserThreads
- 라이브러리를 통해 지원됨
- 프로세스 안에 쓰레드가 여러개 있다는 걸 운영체제가 모름
- 유저 프로그램 스스로 쓰레드들을 관리
- 운영체제 예) POSIX Pthreads, Mach C-threads, Solaris threads
'CS(Computer science)' 카테고리의 다른 글
[운영체제] CPU 스케줄링 (1) (4) | 2022.12.29 |
---|---|
[운영체제] 프로세스 관리 (0) | 2022.12.12 |
[운영체제] 컴퓨터 시스템과 프로그램 수행 (2) (0) | 2022.12.09 |
[운영체제] 컴퓨터 시스템과 프로그램 수행 (1) (0) | 2022.12.06 |
[운영체제] 운영체제란 무엇인가 (0) | 2022.11.17 |
Comments