이론공부/시험공부

운영체제 (OS) - Chapter 03

chobyeonggyu03 2024. 10. 11. 20:42
반응형

● Chapter 03의 목표

- 프로세스의 개념에 대해 설명하기, 프로세스란 모든 계산의 기반을 형성하는 실행 중인 프로그램임
- 프로세스의 특징을 설명하기, 프로세스의 일정, 생성 및 종료, 통신 측면이 포함.
- 공유 메모리와 메시지 전달을 사용하는 프로세스 간  통신 살펴보기
- 클라이언트-서버 통신을 설명하기
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process Concept

- OS는 매우 다양한 프로그램들을 실행하며, 프로그램은 일괄 처리 시스템에서 작업으로 그룹화되거나, 시간 공유 시스템에서 사용자 프로그램이나 작업으로 그룹화됨
- 교재는 job과 proces라는 용어를 사용
- 교재는 프로세스를 실행 중인 프로그램으로 정의함
- 프로세스가 그저 어떤 프로그램이 아니라는 것을 강조함
 
[프로세스의 구성요소들]
- 텍스트 섹션이라고 불리는 프로그램 코드가 들어있음
- 이는 프로그램 카운터와 프로세서 레지스터와 같은 현재 활동
- 함수 매개변수, 반환 주소, 지역 변수등과 같은 임시 데이터를 보관하는 스택
- 전역 변수를 포함한 데이터 섹션
- 런타임 중에 동적으로 할당되는 메모리를 포함하는 힙
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process Concept

- 프로그램은 disk에 저장되는 정적인 Entity이고, 프로세스는 active 한 entity임
- 프로그램은 실행가능한 파일이 메모리로 적재될 때 프로세스가 됨
- GUI의 마우스 클릭, CLI의 파일명의 입력등을 통해 프로그램은 실행됨
- 하나의 프로그램은 몇 개의 프로세스가 될 수 있음, 같은 프로그램을 사용하는 많은 유저가 그 예시임
 
 
 
 
 
 
 
 
 
 
 
 
 

● Memory에서의 Process 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process State

- 프로세스가 실행할 때 해당 프로세스의 state가 변함
 
[Process State 종류]
 
- new : 프로세스가 만들어 지는 줄
- running : 명령어가 실행되는 중
- waiting : 프로세스는 발생할 몇몇 이벤트들을 기다는 중
- ready : 프로세스가 하나의 프로세스가 할당되기를 기다는 중
- terminated : 프로세스가 실행을 종료하는 중
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process State의 도표

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process Control Block (PCB)

- 정보들은 각각의 프로세스들과 관련되어 task control block이라고도 불림
 
프로세스 상태 : 프로세스가 실행 중인지, 대기 중인지 등을 나타냄
- 프로그램 카운터 : 다음에 실행할 명령어의 위치를 저장함
- CPU 레지스터 : 모든 프로세스 중심 레지스터의 내용을 보관함
- CPU 스케줄링 정보 : 우선순위, 스케줄링 큐 포인터를 포함힘
- 메모리 관리 정보 : 프로세스에 할당된 메모리에 대한 세부 정보임
- 회계 정보 : CPU 사용량, 시작 이후 경과 시간 및 기타 시간을 추적함
- I/O 상태 정보 : 프로세스에 할당된 I/O 장치와 열려 있는 파일을 나열함
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process 간의 CPU Switch 

 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Threads

- 지금까지 프로세스는 싱글 스레드로 실행해 옴
- 프로세스마다 많은 프로그램 카운터를 가지는 것을 고려해 보자
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Process Scheduling

- CPU사용을 최대화하여, 빠르게 CPU위의 프로세스들을 Time Sharing을 위해 바꿈
- 프로세스 스케쥴러는 사용가능한 프로세스들 중에서 CPU위에 실행시킬 다음 프로세스를 선택함
- 프로세스의 스케쥴링 큐들을 유지함
 
- 작업 큐(Job Queue) : 시스템의 모든 프로세스들의 집합임 
- 준비 큐(Ready queue) : 메인 메모리에서 실행을 기다리는 프로세스들의 집합임
- 장치 큐(Device queues) : I/O 장치를 기다리는 모든 프로세스들의 집합임
 
 
 
 

 
 
 
 
 
 
 
 
 
 

● Schedulers

- 단기 스케쥴러 : 어느 프로세스가 다음에 실행되고 CPU에 할당되어야 하는지를 선택함
   - 가끔 시스템 내에서 유일하게 처리할 수 있음
   - 단기 스케쥴러는 자주 호출되며, 빠르게 실행되어야 함
 
- 장기 스케쥴러 (작업 스케쥴러) : 어느 프로세스가 준비 큐로 가져와져야 하는지 정함 
   - 장기 스케쥴러는 자주 호출되지 않고 상대적으로 느림
   - 장긴 스케쥴러는 멀티프로그래밍의 정도를 조절함
 
 
- I/O-bound 프로세스 : I/O 작업을 수행하는 시간이 노력하는 시간보다 훨씬 더 간단한 CPU 사용 시간을 가짐
- CPU 바인딩된 프로세스 : 작업량에 더 많은 시간을 소모하며 CPU 사용 시간이 길어짐
- 장기적인 스케줄러의 목표 :좋은 프로세스 믹스를 유지하여 시스템 사용을 최적화함
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Medium Term Scheduling

- 중기 스케쥴러는 멀티프로그래밍의 정도가 감소될 필요가 있을 때 추가될 수 있음
- 메모리로부터 프로세스를 제거하고, 디스크에 적재하여, 다시 메모리로 작업을 수행함 ( = Swapping)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● 모바일 시스템에서의 멀티 태스킹

- 몇몇 모바일 시스템들은 한 번에 하나의 프로세스만 동작하도록 하며, 다른 프로세스들을 중지 상태로 둠
- Foreground Process : UI를 통해 화면에 표시함
- background Process : 메모리에서 실행 중이지만 나타내는 것은 제한되어 있음
- 작업, 단기 작업, 이벤들의 수신을 포함한 제한들이 존재함 
 
- Android는 외부 및 배경을 모두 수행하기 위해 제한이 적음
   - 배경 프레임워크는 서비스(서비스)를 사용하여 작업을 수행할 수 있음
   - 서비스는 배경 프로세스가 중지된 상태에서도 계속 실행될 수 있음
   - 서비스는 사용자 인터페이스가 메모리 사용이 적음
 
 
 
 
 
 
 
 
 
 

● Context Switch

- CPU가 다른 프로세스로 스위칭할 때, 그 시스템은 반드시 기존 프로세스의 상태를 저장해야 하고, 저장한 상태를 Context Switch를 통해 새로운 프로세스에 대한 상태로 저장해야 한다. 
- 프로세스의 내용은 PCB에 나타난다.
- Context-switch 시간이 초과되면, 그 시스템은 더 이상 스위칭을 하는 동안 유용하게 동작하지 않음
- 시간은 하드웨어 성능에 의존함
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Process Creation

- 부모 프로세스는 다른 프로세스들을 생성하는 자식 프로세스를 생성하여 프로세스 트리를 만듦
- 일반적으로 프로세스는 process identifier(Pid)를 통해 관리되고 확인됨
- 자원 공유 옵션 : 부모 프로세스와 자식 프로세스는 모두 공유함, 자식프로세스는 부모의 자원을 하위요소에 공유할 수 있음, 부모와 자식은 같은 자원을 공유하지 않음
- 실행 옵션 : 부모와 자식은 동시에 실행됨, 부모는 자식이 종료될 때까지 기다림
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process Creation

- 주소 공간 : 부모의 주소를 자식이 복사하며, 자식은 이것에 적재하는 하나의 프로그램을 가지고 있음
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process Termination

- 프로세스는 가장 마지막 상태를 실행하고, 그다음 OS에게 exit() 시스템 콜을 사용하여 이것을 삭제하라고 하며, 자식부터 부모까지의 상태 정보를 반환해 줌, 프로세스의 자원들은 OS로부터 제거됨
- 부모는 자식 프로세스가 할당된 자원을 초과한 경우와 작업에 자식 프로세스가 더 이상 필요하지 않을 경우, 부모 프로세스가 존재하고 OS가 부모 프로세스가 종료되지 않으면 자식 프로세스가 계속해서 실행되도록 수락 하게 해 두는 경우에 프로세스를 종료시킨다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Process Termination

- 몇몇 OS들은 부모 프로세스가 종료되지 않았다면 자식 프로세스도 종료시키지 못하게 함
- 부모 프로세스는 wait() 함수를 통해 자식 프로세스의 종료를 기다리게 할 수 있고, 이 시스템 콜은 종료된 프로세스 아이디를 상태정보와 같이 반환함
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Process Termination

- 많은 웹 브라우저들은 하나의 프로세스들로 운영됨 
- 구글 크롬 브라우저는 3개의 다른 형태의 프로세스들로 멀티 프로세스를 사용 중임
- 브라우저 프로세스는 UI, 디스크, 입출력 네트워크를 관리함
- 렌더링 프로세스는 웹 페이지들을 렌더링 하며 HTML과 Javascript를 다룸
- 플러그인 프로세스는 각 타입에 맞게 연동시킴 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Interprocess Communication

- 하나의 시스템 내의 프로세스들은 독립적일 수도 있고 협력적일 수도 있음
- 협력적인 프로세스는 다른 프로세스들에게 데이터를 공유하는 등의 영향을 줄 수 있음 
- 협력 프로세스를 사용하는 이유 ; 자원 공유, 계산 속도 향상, 모듈성, 편리성
- 협력 프로세스들은 InterProcess Communcation(IPC)이 필요함 (IPC는 공유 메모리와 메시지 패싱 2가지로 나뉨)
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● InterProcess Communication (IPC)

- 독립적인 프로세스는 다른 프로세스의 실행에 영향을 주거나 받을 수 없음
- 협력 프로세스는 다른 프로세스의 실행에 영향을 주거나 받을 수 있음
- 협력 프로세스의 장점 : 정보 공유, 계산 속도 향상, 모듈성, 편의성
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Producer-Consumer Problem

- 협력 프로세스를 위한 도표, 생산 프로세스는 소비자 프로세스들에 의해 소비되는 정보들을 만듦
- Unbounded-buffer : buffer 사이즈에 제한되지 않음
- bounded-buffer : 고정된 buffer 사이즈를 가짐  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Interprocess Communication - Shared Mamory

- 커뮤니케이션을 하는 프로세스들끼리 공유된 메모리 부분
- 커뮤니케이션은 사용자들의 통제하에 있는 프로세스임 (운영체제는 아님)
- 사용자들이  공유 메모리에 접근하는 경우, 사용자 프로세스를 동시에 그들의 액션을 취하는 것이 가능하도록 하는 메커니즘을 제공해 주는 것이 가장 큰  문제임 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Interprocess Communication - Message Passing

- 사용자들의 액션을 동시에 가능하게 하고 커뮤니케이션하게 하기 위한 프로세스에 대한 메커니즘임
- 메시지 시스템임, 프로세스는 공유된 변수들을 분류하는 것 없이 서로 통신함
- IPC 기능은 sdn와 receive 2가지 기능을 제공함
- 문자크기는 고정되어 있거나 변함
 
 
 
 
 
 
 
 
 
 
 
 

● Message Passing

- 만약 프로세스 P와 Q가 통신하기를 원한다면, 그들은 Communcation Link를 만들어야 하고, send(), receive() 함수들을 통해 통신해야 함
- 실행하는 데에 여러 가지 문제들이 존재함 : 어떻게 Link를 만들 것인가?, 2개 이상일 때 Link를 연결할 수 있나?, 어떻게 많은 링크들이 통신하는 프로세스들 사이에 존재할 수 있는가?, 링크의 용량은 몇인가? 등등
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Message Passing

- 물리적인 Communication Link : 공유 메모리, 하드웨어 버스. 네트워크
- 논리적인 Communication Link : 직접적이거나 간접적임, 동기성이거나 비동기성임, 자동적이거나 분명한 버퍼링
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Direct Communication

- 프로세스는 반드시 서로 이름이 분명해야 함
   - send(P, message) : 프로세스 P에 메시지를 보내는 함수
   - receive(Q, message) : 프로세스 Q로부터 메시지를 받는 함수
- Communication Link의 속성
   - Link들은 자동적으로 생성됨
   - 링크는 통신하는 프로세스의 상과 정교하게 관련되어 있음
   - 각 쌍들 사이에는 정확히 하나의 링크만 존재함
   - 링크는 일반적으로 양방향이지만, 단방향일 수 있음
 
 
 
 
 
 
 
 
 
 
 
 

 

● Indirect Communication

- 메시지들은 직접적으로 mailboxes로부터 받아짐
   - 각각의 mailbox는 고유 Id를 가지고 있음
   - 프로세스들은 오직 프로세스들끼리 하나의 mailbox를 공유할때만 통신할 수 있음
- Communication link의 속성
   - 링크는 오직 프로세스가 같은 mailbox를 공유할 때만 생성될 수 있음
   - 하나의 링크는 여러 프로세스들과 연관될 확률이 높음
   - 각 프로세스의 쌍은 아마 몇몇 Coummunication link들과 연결되어 있을 수 있음
   - 링크는 양방향이거나 비양항성일 수 있음
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Indirect Communication

- 동작 방법
   1) 새로운 mailbox를 만듦
   2) mailbox를 통해 메시지를 주거나 받음
   3) mailbox를 부심
 
-
   - send(A, message) : A mailbox에 메시지를 보냄
   - receive(A, message) : A mailbox로부터 메시지를 받음
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Indirect Communication

- Mailbox 공유
   - P1, P2, P3는 A mailbox를 공유함
   - P! 이 메시지를 보내고 P2와 P3가 메시지를 받음
   - 누가 메시지를 받는가?
 
- 해결책
   - 하나의 링크가 최대 2개의 프로세스를 연결할 수 있게 하기
   - 오직 하나의 프로세스만 한 번에 메시지를 받을 수 있게 하기
   - 시스템이 제멋대로 수신자를 선택할 수 있게 하고, 발신자에게 수신자가 누구였는지를 알리기
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Synchronization

- 메시지 패싱은 아마 blocking 이거나 non- blocking 일거임
- 차단방식 (blocking)은 동기적으로 동작함
   - Blocking Send (차단 발신) : 발신자는 메시지가 수신될 때까지 대기함
   - Blocking Receive (차단 수신) : 수신자는 메시지가 도착할 때까지 차단함
 
 
- 비차단방식 (non-blocking): 발신자는 메시지를 전송한 후 즉시 다른 작업을 계속 함 
   - Non-blocking Send( 비차단 발신): 발신자는 메시지를 전송한 후 즉시 다른 작업을 계속할 수 있음
   - Non-blocking Receive ( 비타단 수신): 수신자는 유효한 메시지를 받거나 메시지가 없 땐 Null을 반환받음
 
- 차단 방식과 비차단 방식은 다양하게 조합될 수 있으며, 발신과 수신이 모두 차단될 때는 랑데부(rendezvous)'라고 함
 

반응형