본문 바로가기
운영체제

[운영체제] 3. 프로세스 관리 - (3) 프로세스의 계층 구조

by NoDapKeepGoing 2025. 4. 11.

<2025.3.20.목요일 수업>

 

!!여기도 마인드맵!!

 

 

📍1. 프로세스 정보 보기

1-1. Linux 쉘 명령으로 프로세스 정보 보기

 

 

1-2. Linux에서 C프로그램으로 PID와 PPID 알아내기

e.g.) 시스템 호출 함수 getpid(), getppid()를 이용하여 PID와 PPID를 얻어내는 C프로그램 작성하기

#include <stdio.h>      // printf()를 사용하기 위한 헤더
#include <sys/types.h>  // pid_t 타입을 정의하는 헤더
#include <unistd.h>     // getpid(), getppid() 시스템 호출 선언

int main(void) {
    pid_t pid, ppid;    // PID를 저장할 변수들 선언

    pid  = getpid();    // ① 현재 프로세스의 PID 얻기
    ppid = getppid();   // ② 부모 프로세스의 PID 얻기

    // ③ 결과 출력
    printf("프로세스 PID = %d, 부모 프로세스 PID = %d\n", (int)pid, (int)ppid);

    return 0;           // ④ 정상 종료
}

 

[출력 결과]

$ gcc-o pinfopinfo.c
$ ./pinfo
프로세스 PID = 31006, 부모 프로세스 PID = 30861

 

📍2. 프로세스 부모-자식 관계 알아보기

2-1. Linux 프로세스 목록에서 부모-자식 관계 확인

 

 

2-2. Linux에서 부모-자식 계층 관계 알아보기

 

📍3. 프로세스 생성 및 종료

3-1. 프로세스 생성

✔️ 시스템 부팅 과정에서 프로세스 생성
✔️ 로그인 시 쉘 프로세스 생성(bash, Windows explorer)
✔️ 응용프로그램 수행으로 생성
✔️ 수행 중인 프로세스가 자식 프로세스 생성
    - Linux: fork() 시스템호출로 자식 프로세스 생성
    - Windows: CreateProcess() 시스템호출로 자식 프로세스 생성

 

3-2. 프로세스 종료

✔️ C프로그램의 main()에서 return
✔️ exit() 시스템 호출

 

3-3. Linux에서 프로세스 생성과 종료 다이어그램

 

3-4. 프로세스 생성은 커널에서 이루어지며 다음 작업 진행

✔️ 새로운 PID 번호 할당
✔️ 프로세스 테이블에 새 항목 할당
✔️ PCB 자료구조 생성
✔️ 새로 할당된 프로세스 테이블 항목에 PCB 연결
✔️ 프로세스를 위한 메모리 공간 할당(코드, 데이터, 힙, 스택)
✔️ 할당받은 메모리 공간에 프로세스의 코드와 데이터 적재
✔️ PCB에 프로세스 정보 기록
✔️ PCB에 프로세스의 상태를 Ready로 표시하고 준비 큐에 삽입

 

3-5. L inux에서 프로세스 생성 예제 프로그램

 

 

3-6. fork()의 수행 과정

 

📍4. CPU 집중 프로세스와 I/O 집중 프로세스

4-1. CPU 집중 프로세스(CPU intensive process)

✔️ 작업이 대부분 계산 중심적인 일로 구성되어 수행의 많은 부분에 CPU를 사용하는 프로세스
e.g.) 배열 연산, 이미지 처리 등

 

4-2. I/O 집중 프로세스(I/O intensive process)

✔️ 작업의 많은 부분이 파일 입출력으로 구성된 프로세스
e.g.) 파일서버, 네트워크서버