[CS Study : OS] 프로세스 개요

Byuk_mm·2022년 7월 21일
0
post-thumbnail

컴퓨터 과학에 대한 지식을 습득하고 정리하는 기록용 포스팅입니다.
예외를 판단하는 사고를 기르고, 효율적인 코드를 작성하기 위해
컴퓨터 과학 지식을 활용하는 것을 목표로 합니다.


✅ 프로세스

운영체제에서 프로세스는 하나의 작업 단위로, 프로그램이 메모리에 적재돼 CPU 자원을 할당받아 실행되고 있는 상태를 말하며, 'task'라고도 부른다.
프로그램이 프로세스로 전환될 때, 운영체제는 프로그램을 메모리의 적당한 위치로 가져온다. 그와 동시에 PCB(Process Controll Block, 프로세스 제어 블록)을 생성한다.

프로그램이 프로세스가 된다는 것은 운영체제로부터 PCB를 얻는다는 뜻이고,
프로세스가 종료된다는 것은 PCB가 폐기된다는 뜻이다.

📌 PCB(Process Controll Block, 프로세스 제어 블록):

PCB에는 프로세스를 처리하는 데 필요한 다양한 정보가 들어가 있다.
PCB는 운영체제가 해당 프로세스를 위해 관리하는 데이터 구조이기 때문에 운영체제 영역에 만들어진다.

  • 포인터 : PCB의 첫 번째 블록에는 포인터가 저장된다.준비 상태와 대기 상태는 큐로 운영되는데, 이 큐를 구현할 때 사용된다.
  • 프로세스의 상태 : 이 프로세스가 현재 어떤 상태에 있는지 나타낸다.
  • PID(Process IDentification,프로세스 구분자) : 각 프로세스를 구분해주는 프로세스 구분자.
  • PPID(Parent PID), CPID(Child PID) : 각각 부모 프로세스 구분자, 자식 프로세스 구분자.
  • 메모리 관련 정보 : 프로세스의 메모리 위치 정보, 메모리 보호를 위한 경계 레지스터와 한계 레지스터.
  • 각종 중간값 : 프로세스가 사용했던 중간값.



✅ 프로세스 처리 방식

📌 일괄 작업 방식

한번에 하나의 프로세스만을 처리하는 작업 방식.

📌 시분할 방식

여러 프로세스들을 조금씩 반갈아가면서 처리하는 작업 방식.




✅ 프로세스 상태

  • 생성 상태 : 프로그램이 메모리에 올라오고 운영체제로부터 PCB를 할당받은 상태이다.

  • 준비 상태 : 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태이다. 생성된 프로세스는 바로 실행되는 것이 아니라, 준비 큐에서 자신의 순서를 기다린다.
    CPU 스케줄러가 어떤 PCB를 실행 상태로 보낼지 dispatch 명령을 통해 선택한다.

  • 실행 상태 : 프로세스가 CPU를 할당받아 실행되는 상태이다. 준비 상태에 있는 많은 프로세스 중 실행 상태에 들어가는 프로세스는 CPU의 개수 만큼이다.
    실행 상태에 있는 프로세스는 자신에게 주어진 시간, 즉 타임 슬라이스 동안만 작업할 수 있다.
    그 시간을 다 사용하면 timeout 명령이, 작업이 완료되면 exit 명령이 실행된다.
    실행 상태에 있는 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block 명령을 실행해 대기 상태로 옮긴 후 새로운 프로세스를 dispatch한다.

  • 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태이다. 입출력이 완료되는 인터럽트가 발생하고 wakeup 명령을 통해 준비 상태로 이동시킨다.

  • 완료 상태 : 프로세스가 종료되는 상태이다. 사용했던 코드와 데이터를 메모리에서 삭제하고 PCB를 폐기한다.

📌 문맥 교환(Context switching)

CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말한다. 즉 두 프로세스의 PCB 교환하는 작업이다. 문맥 교환 중 다른 작업을 할 수 없는데, 이 시간을 오버 헤드라고 부른다.




✅ 프로세스 연산


📌 프로세스의 구조

  • 코드 영역 : 프로그램의 본문이 기술된 곳으로 텍스트 영역이라고도 한다.
  • 데이터 영역 : 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓는 곳이다.
  • 스택 영역 : 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳이다.

📌 fork() 시스템 콜

fork() 시스템 콜은 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수이다.
이때 새로 생긴 프로세스는 자식 프로세스, 이미 실행 중이던 프로세스가 부모 프로세스가 된다.

예를 들어 한글 프로그램을 하나 실행하고 있다가 하나 더 실행하면 fork 호출을 통해 더 빨리 프로세스가 생성된다.


📌 fork() 시스템 콜 장점

  • 하드 디스크로부터 프로그램을 새로 가져오지 않고, 기존 메모리에서 복사하기 때문에 프로세스 생성 속도가 빠르다.
  • 추가 작업 없이 자원을 상속할 수 있다.
  • PPID, CPID로 연결되기 때문에, 시스템 관리를 효율적으로 할 수 있다.

📌 exec() 시스템 콜

exec() 시스템 콜은 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 콜이다. exec() 시스템 콜이 호출되면 코드 영역에 있는 기존의 내용을 지우고 새로운 코드로 바꿔 버린다. 현재의 프로세스가 완전히 다른 프로세스로 전환된다. 기존의 프로세스의 구조를 그대로 둔채 내용만을 바꿔서 실행한다.
exec() 시스템 콜의 목적은 프로세스의 구조체를 재활용하기 위함에 있다.




✅ 참고

도서 : 쉽게 배우는 운영체제

profile
어디야 벽벽 / 블로그 이전 -> byuk.dev

0개의 댓글