[2장]Process

임정환·2023년 2월 13일
0

운영체제

목록 보기
3/8

What is a process?

Process란 무엇인가? OS에 의해 추상화된 수행단위이다. 쉽게 말하자면, 메모리위에 올라가 있는 Program이다.

Process의 주소공간을 보면, 우리가 익히 알고있는 text,stack,heap등으로 구성되어있다.
우리가 사용하는 메모리위에 저런 Process들이 올라가 있는 상태이다 (실제로는 paging등으로 쪼개져 있지만,그건 나중에...).

OS는 Process를 어떻게 관리할까?

OS는 각 프로세스의 관리를 위해 PID(Process ID)를 각 Process에 부여한다. OS는 PCB(Process Control Block)을 이용해서 (PCB는 프로세스들의 구체적인 실행정보 등을 저장한 Table이다) 각 프로세스를 관리한다.
각 프로세스들은, 다른 프로세스들에 의해 생성되거나 삭제될 수 있다. 이때, child process는 parent process의
많은 권한과 기능을 가져오게된다.

프로세스 생성을 야기하는 경우
1. 시스템 초기화
2. system call (ex: UNIX의 fork()명령어)
3. user의 process 생성 요청

  • 유닉스시스템에서, fork를 통한 child process생성의 예시.
  • 이 외에도, 유닉스 상에선 exec()명령어를 통해 자식이 아닌 아예 새로운 process를 생성할 수도 있다.
  • 또한, exit 명령어를 통해 process 종료를 야기할 수도 있다.

Process States

각 프로세스들은 상태(State)를 가지게 된다.

  • Ready: 프로세스가 CPU에 할당되기 까지 기다리고 있는 상태
  • Running: 프로세스가 CPU에 할당되어 연산을 실행중인 상태
  • Block: 특정 Event를 대기중인 상태(ex: I/O 즉, 파일 입출력 등등)

노트 필기에서 선점형,비선점형등이 나오지만 지금은 신경쓰지 말자. 나중에 Process Scheduling에서 다루도록 하겠다.
위의 상태표는, 각 process의 상태가 어떻게 전이되는지 간단히 나타낸 모식도이다.
Process는 cpu에 할당되어 연산을 진행하다가, 특정 event로 인해 block되게 된다. 그럴경우, cpu 스케쥴러가
효율성을 위해 block된 process의 현재 정보를 PCB에 저장한다. ( 예를 들면, 현재 변수값 레지스터 값 등등...)
이 후, cpu에는 다른 waiting중인 process가 할당되게 된다. 이후 , event가 끝난 후 아까전 프로세스가 다시
cpu에 할당되기 위해 대기 queue에 들어오게 되고 cpu 스케쥴러의 정책에 따라 스케쥴링되게 된다.

Process의 구성

프로세스는 아래와 같이 구성된다.

  • 주소공간 ( 정확히는 OS에 의해 추상화된 가상공간. 나중에 알아보자)
  • 프로그램의 코드
  • 프로그램의 Data
  • Stack Pointer, Program Counter등의 Hardware context
  • 기타 OS자원 및 레지스터 값

프로세스는 위의 요소들의 집합으로 표현될 수 있다.

Conclusion

Process란 CPU에 할당되는 연산의 단위이자. 하나의 독립적인 개체라고 생각해도 무방하다. 각 process들은 각기 다른
주소공간을 가지게 된다. 이로 인해, 각 연산값들을 주고 받기가 힘든 문제가 발생한다.
예를 들어, Process A에서 연산한 값을 Process B에서 사용하고 싶다면 이는 쉽지 않을 것이다. 애초에, 서로 독립적인
메모리 영역을 사용중이기 때문이다. 우리가 옆집 사람과 소통하기 위해서는, 전화나 문자등을 할 수 있듯이
이러한 문제를 해결하기 위해 IPC(Inter Process Comunication), Socket등이 존재한다. 하지만 이러한 방법에도 한계가
존재한다. 이 문제를 극복하기 위해, Thread라는 최소의 CPU 실행단위를 만들었다.
다음 포스팅에서는 Thread에 대해 알아보도록 하자.

profile
CS 박제

0개의 댓글