Chapter3. Process Concept

3.1 Process Concept

프로세스란?

a program that is in execution.

프로세스가 메모리 상에 존재하는 모습

사진

  • text : 코드 + Program Counter + registers
  • stack : temporary data(function parameters, return addresses, and local Variables)
  • data : global variables
  • heap : 동적으로 할당되는 메모리

(나는 이게 계속 헷갈린다.)

위의 이미지처럼 stack에 데이터 같은게 막 쌓이고 내려가고 하고 heap을 동적으로 막 할당하면서 프로세스 진행되는 동안 프로세스 메모리가 꿀렁인다.

Process State

사진

5개의 state가 존재하는데 위와 같은 구조로 왔다리 갔다리 한다.

PCB

사진

Process Control Block의 약자로 프로세스의 정보를 담고 있는 블락이다. 나중에 Context Switch가 일어날 때 PCB에 저장된 정보를 저장하고 해당 프로세스로 돌아올 때 PCB를 참고한다.

3.2 Process Scheduling

Scheduling Queues

프로세스가 시스템에 들어오게 되면, job queue에 들어오게 된다. 이때 이 ready queue에 들어오는 애들을 걸러주고 들어온 친구들의 일의 순서를 정해주는 친구가 필요하다.

이런 역할을 해주는 친구가 Scheduler이다.

먼저 job queue에서 I/O bound 와 CPU bound 친구들을 적절히 섞어서 memory에 올려주는 역할을 하는 친구가 long term scheduler이다.

그 memory에 있는 process 중에서 CPU에게 지금 일할 친구를 선택해주는 역할은 short-term scheduler이다.

Context Switching

interrupt가 발생하면 CPU가 다른 process를 감당하도록 해야 한다. 그럼 지금 일하던 친구의 state를 저장하고 다른 process로 switch해야 한다.

이 경우를 Context Switching 이라고 한다.

Context Switching 하는 시간은 하드웨어에 달려있고 이 시간도 꽤나 걸릴 수 있으니 유의해야한다.

3.3 Operations on Processes

프로세스 생성

차일드 노드를 생성할 때 차일드 노드는 리소스를 오에스에서 직접 가져올 수도 있고 부모 리소스만 공유될 수도 있다.

  • 부모 리소스만 쓰는게 overloading을 방지할 수 있다.

새로운 프로세스 생성시 두가지 액션

  • 부모노드가 같이 일해
  • 부모가 자식노드 끝날때까지 기다려(wait())

공간 할당에서 두가지 가능성

  • 자식노드가 부모프로세스 카피해(fork())
  • 자식 노드가 새로운 프로그램 로드해

주로 하나의 노드는 exel한다 이거는 컨트롤 안돌려줘

Exec는 exit이 내부에 있다.

윈도우 식 createprocess 복잡스

프로세스 종료

exit()

중도에 프로세스 중단시킬 수도 있는데 이거는 부모에서만 보통 가능

  • 차일드가 너무 리소스 많이썼어
  • 차일드 태스크 이제 필요없어

차일드 노드가 죽으면 exit status를 리턴해준다.

죽었는데 페런츠가 웨잇안해준 친구들은 다 좀비 프로세스다.

근데 부모가 웨잇도 안하고 죽어버렸어 그럼 orphans라고 한다.

이친구들 입양해주려고 init 때 wait함수를 이용한다.

3.4 Interprocess Communication


다른 프로세스 영향 안받는 프로세스 = independent

아니면 cooperating해야하는데 이 친구들은 IPC가 필요하다(InterProcess Comunication)!

소통 방법은 shared memory, message passing이 많이 쓰인다.

shared memory는 특정 영역을 쓰고 읽는것을 의미하고

message passing은 데이터 직접 보내고 받는 것이다.

  • 작은 데이터에 적합
  • 시스콜이기 때문에 shared memory보다 조금 느림

Shared Memory Systems

여러 원래 같은 파일 내용을 읽고 쓰는거 오에스에서는 별로 안좋아해 그치만 그걸 깼다.

프로듀서와 컨슈머로 설명 가능

  • Producer는 consumer process가 소비할 정보를 제공한다.
  • Consumer는 정보 가게를 찾아가서 정보를 가져온다.

일단 이걸 할라면 아이템을 보내줄 버퍼가 공유된 region에 필요하다.

버퍼의 두 종류

  • unbounded buffer : 제공자가 언제든지 제공할 수 있어
  • bounded buffer : 버퍼 꽉차면 제공자 기다려야함

Message Passing Systems

직접 Process간에 통신하는 방법이다.

여기의 문제점은

센드와 리시브에는 사이즈 제한이 있으면 프로그램단에서 편한데 임플리멘트하는데 어려움이 있다.

Naming

어디로 보낼 건지 알려줘야 한다.

방법1. 일일이 프로세스 이름으로 네이밍을 하는 방법

  • 하드코딩이다
  • 다른 프로세스에서 오면 어떻게 할건데

방법2. 메일 박스, 포트를 이용하는 방법

  • 여러 프로세스가 메일박스를 공유한다고 하면
  • 리시버를 한명으로 한정지을 수 있게 해야한다.
  • 메일 박스를 오에스가 가지고 있어야
  • 유저가 가지고 있으면 주인이랑 고객으로 또 나뉘게 된다.

Synchronization

블라킹 센드 - 메세지가 도착할때까지 센딩 블락 논블라킹 센드 - 그냥 막 보낼 수 있어

블라킹 리시브 - 메세지가 있을 때만 받아 논빌라킹 리시브 - 널도 받아

두개 혼용해서 쓸수도있어

3.6 Communication in Client - Server Systems

Sockets

소켓으로 통신하는 방법

여기서 소켓이란 endpoint for communication을 의미하는데

두 프로세스가 한 쌍의 소켓으로 통신한다.

소켓은 IP+Port로 구성 되어있다.

TCP와 UDP 통신의 차이점

  • TCP 통신은 Connection oriented 통신 방법으로 Connection이 확인 되었을 때 진행 된다.
  • 때문에 훨씬 더 reliable하다 하지만 연결 확인 절차가 필요하므로 조금은 더 costy하다.
  • 반면에 UDP 통신은 Connectionless 통신 방법으로 Connection을 확인하지 않고 보낸다.
  • 때문에 data가 잘 전해졌는지 여부를 확인할 수 없다. 하지만 확인 절차가 없으므로 훨씬 경제적이다.

RPC(Remote Procedure Call)

IPC보다 well structured하다.

port 같은 역할을 하는 stub가 존재해서 parameter을 전달한다.

Pipe

  1. Ordinary Pipes
  • 원래 uni direction하다.
  • parent & child 간에만 소통이 가능했었다.
  1. Named Pipes
  • FIFO를 통해 부모 자식 간이 아닌 다양한 프로세스 간에 통신이 가능하게 됐다.
  • FIFO는 Bidirectional communication을 가능하게 한다.