[운영체제] 프로세스(process)

cosmos-JJ·2023년 9월 19일
0

Computer Science

목록 보기
7/15
post-thumbnail

프로세스

프로그램과 프로세스

컴퓨터 프로그램 : 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음
프로세스 : 실행중인 프로그램

프로그램의 사전적 의미이는 진행 계획이나 순서, 또는 그 목록을 말하고 컴퓨터에서 프로그램이란 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문 집합이다.

프로그램과 프로세스를 연결해서 설명해보자면
보조기억장치에 저장되어 있는 데이터 덩어리를 프로그램이라 하고 이 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스 가 된다.


프로세스의 분류

  • 포그라운드 프로세스(foreground process) : 사용자가 보는 앞에서 실행되는 프로세스
  • 백그라운드 프로세스(background process): 사용자가 보지 못하는 뒤편에서 실행되는 프로세스
    • 데몬(유닉스 운영체제),서비스(윈도우 운영체제) : 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 프로세스

프로세스 제어 블록(PBC : Process Control Block )

프로세스 제어 블록(PBC : Process Control Block ) : 빠르게 번갈아가며 수행되는 프로세스를 관리하기 위해 사용되는 자료 구조

  • 프로세스 관련 정보를 저장
  • 프로세스 생성 시 커널 영역에 생성되고 프로세스 종료시 폐기됨

PCB에 담기는 대표적인 정보

- 프로세스 ID : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호

- 레지스터 값 : 프로세스 실행시 이전까지 사용한 레지스터 중간 값 복원 후 실행 재게

- 프로세스 상태 : 
ex) 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태 등등..

- CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보

- 메모리 정보 : 어느 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보

- 사용한 파일과 입출력장치 정보 : 할당된 입출력장치, 사용중인 파일 정보

문맥 교환 (Context Switching)

문맥 교환 (Context Switching) : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것

문맥 교환 순서
기존에 실행되던 프로세스 중간 정보를 백업 ↔ 뒤이어 실행할 프로세스 문맥을 복구
반복하여 실행


프로세스의 메모리영역

프로세스 생성 시 커널영역에 PCB가 저장되고 사용자영역에는 무엇이 배치될까?

  1. 코드 영역(code segment) == 텍스트 영역(text segment)

    • 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
    • 데이터가 아닌 CPU가 실행할 명령어가 담기기에 읽기 전용 공간(read-only)
  2. 데이터 영역

    • 프로그램이 실행되는 동안 유지할 데이터 저장
    • e.g 전역변수 (global variable)

    ❗❗ 코드영역과 데이터 영역은 크기가 고정된 정적 할당 영역

  3. 힙 영역
    - 프로그래머가 직접 할당할 수 있는 저장공간

    <메모리 누수(memory leak)>
    힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 하는데
    메모리 공간을 반환하지 않아 할당한 공간아 메모리 내에 계속 남아있어 메모리 낭비를 초래하는 문제
    
    <가비지 컬렉션(garbage collection)>
    메모리 누수를 방지하기 위한 메모리 관리 방법
    
  4. 스택 영역

    • 데이터를 일시적으로 저장하는 공간
    • e.g 매개 변수, 지역 변수

    ❗❗ 힙 영역과 스택 영역은 크기가 가변적인 동적 할당 영역



프로세스 상태

  • 생성 상태(new)

    • 방금 메모리에 적재되어 PCB를 할당 받은 상태

  • 준비 상태(ready)

    • CPU를 할당받기 위해 자신의 차례를 기다리는 상태
    • 자신의 차례가 된다면 CPU를 할당 받아 실행 상태가 됨 (= 디스패치)

  • 실행 상태(running)

    • CPU를 할당 받아 실행 중인 상태
    • 할당된 시간을 모두 사용시(타이머 인터럽트 발생 시) 준비상태로 돌아감
    • 실행 도중 입출력 장치를 사용하면 작업이 끝날 때 까지 대기 상태

  • 대기 상태(blocked)

    • 프로세스가 실행 도중 입출력장치를 사용하는 경우
    • 입출력 작업은 CPU에 비해 느리기때문에 대기 상태로 접어듬
    • 입출력 작업이 끝나면 준비상태로 돌아감

  • 종료 상태(terminated)

    • 프로세스가 종료된 상태
    • PCB, 프로세스의 메모리 영역 정리


                                            ⬆ 프로세스 상태 다이어그램


프로세스 계층 구조

부모 프로세스 : 새 프로세스를 생성한 프로세스
자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
(윈도우는 프로세스 계층이 없음)

➡ 부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가짐


fork 와 exec

fork : 자기 자신 프로세스의 복사본을 자식 프로세스로 생성하는 시스템 호출
exec : 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출

프로세스 생성 기법
1. 부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성
2. 자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체

참고

  • 혼자 공부하는 컴퓨터구조 + 운영체제 (강민철 지음)
profile
🤍도전하는 건 즐거워요🤍

0개의 댓글