개발자는 기록이 답이다

기술 면접 대비 CS 핵심 요약 - 프로세스의 생성 본문

CS/운영체제

기술 면접 대비 CS 핵심 요약 - 프로세스의 생성

slow-walker 2023. 9. 7. 22:03

2023.09.06 - [CS] - 기술 면접 대비 CS 핵심 요약 - 운영체제

 

📕본 포스팅은 "기술면접 대비 CS 전공 핵심 요약집" 책을 공부하면서 정리한 내용입니다.


1.2 프로세스

 

프로세스 관련 질문이 나왔을 때 프로세스를 이용한 프로그래밍 경험을 답변에 넣으면 본인의 개발 경험을 부각할 수 있다

 

1.2.1 프로레스와 스레드 ( 중요도 ★★★ )

 

프로세스

  • 컴퓨터에서 실행 중인 하나의 프로그램
  • OS는 프로그램을 실행하면서 디스크에 저장된 데이터를 메모리로 로드한다
  • OS로부터 독립된 메모리 영역(코드, 데이터, 스택, 힙)을 할당받으며, 다른 프로세스의 메모리 영역에 접근할 수 없다.
  • PCB는 프로세스 제어블록이다.

 

프로세스에 할당된 메모리 영역

 

프로세스의 메모리 구조 영역

 

 

  • 스택(stack) : 지역 변수, 함수의 매개변수, 반환되는 주소 값등이 저장되는 영역
    • 높은 주소 값에서 낮은 주소 값으로 메모리가 할당됨
    • 영역 크기는 컴파일 때 결정됨
  • 힙(heap) : 사용자에 의해 동적 메모리 할당이 일어나는 영역 ex) C언어의 malloc()로 할당되는 영역
    • 낮은 주소 값에서 높은 주소 값으로 메모리가 할당됨
    • 영역 크기는 런타임 때 결정됨
  • 데이터(data) : 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역
    • BSS(Block Stated Symbol)영역 : 초기화하지 않는 변수 저장
    • 데이터 영역 : 초기화한 변수를 저장
  • 코드(code) : 실행할 코드가 기계어로 컴파일되어 저장되는 영역 = 텍스트 내용

 

 

스택 영역과 힙 영역은 동적으로 메모리 할다잉 가능해 두 영역 사이에 빈 메모리 공간이 존재한다

  • 스택 영역 LIFO(Last In First Out) 방식, 높은 주소값에서 낮은 주소 값 순서로 사용
  • 힙 영역 FIFO(First In First Out) 방식, 낮은 주소 값에서 높은 주소 값 순서로 사용

 

메모리 영역을 공유하기 때문에 서로의 영역을 침범하는 문제가 생길 수 있다.

  • 스택 오버 플로우 : 스택 영역이 힙 영역을 침범하는 경우
  • 힙 오버 플로우 : 힙 영역이 스택 영역을 침범하는 경우
오버플로(overflow) : 메모리 공간에서 할당할 수 있는 최대 범위를 넘어가는 것을 의미
언더플로(underflow) : 메모리 공간에서 할당할 수 있는 최소 범위보다 작은것

 

스레드

  • 프로세스는 한 개 이상의 스레드를 갖는데, 스레드란 프로세스에서 실제로 실행되는 흐름의 단위를 의미.
  • 프로세스 안에 존재하므로 프로세스의 메모리 공간을 이용하고, 지역 변수를 저장하는 스택 영역을 할당받는다.
  • 그리고 전역 변수를 저장하는 힙 영역은 다른 스레드와 공유한다.

 

운영체제에서 프로세스와 스레드 구조

 

사용자 레벨 스레드 vs 커널 레벨 스레드

 

스레드도 커널처럼 스레드를 관리하는 주체에 따라 구분된다.

 

  • 사용자 레벨 스레드 :  사용자가 라이브러리를 이용해 생성 및 관리
  • 커널 레벨 스레드 : 커널이 스레드를 생성 및 관리

 

  • 1. 다대일 모델 (many-to-one model)
    • 사용자 레벨 스레드 n개에 커널 레벨 스레드 1개가 매핑되어 사용자 레벨에서 스레드를 관리한다
    • 하나의 사용자 레벨 스레드에서 시스템 콜을 호출하면 나머지 사용자 레벨 스레드를 커널 레벨에 접근할 수 없으므로 멀티 코어의 병렬성을 이용할 수 없다

다대일 모델

  • 2. 일대일 모델(one-to-one model)
    • 사용자 레벨 스레드 1개에 커널 레벨 스래드 1개가 매핑된다.
    • 하나의 사용자 레벨 스레드에서 시스템 콜을 호출하면 다른 사용자 레벨 스레드가 모두 실행되지 않는 다대일 모델의 단점을 해결한다
    • 하지만 사용자 레벨 스레드 수만큼 커널 레벨 스레드가 생성되므로 성능 저하가 일어날 수 있다.
     

일대일 모델

 

  • 3. 다대다 모델(many-to-many mdoel)
    • 사용자 레벨 스레드 n개에 커널 레벨 스레드 mr개가 매핑된다.
    • 이때 커널 레벨 스레드의 수(m)는 사용자 레벨 스레드의 수(ndlgkdlek.
    • 일대일과 다대일 모델의 장점을 포함하지만 구현이 어렵다.

다대다 모델

1.2.2 PCB(Process Control Block) ( 중요도 ★★☆ )

OS는 프로세스를 제어하기 위해 프로세스 정보를 저장하는데 이를 PCB라고 한다.

프로레스의 현재 상태, 프로세스를 나타내는 고유의 PID, 부모 프로세스의 PID, 자식 프로세스의 PID, 다음 실행할 명령어의 주소인 PC(Program Counter), 프로세스의 우선순위, 메모리 제한등을 저장

 

PCB 저장 정보

 

1.2.3 프로세스 생성 ( 중요도 ★★★ )

 

  • 프로세스 생성은 주로 fork()함수를 통해 이뤄진다,
  • fork()함수에는 함수를 호출한 프로세스를 복사하는 기능이 있다.
  • 기존 프로세스는 부모, 복사된 프로세스는 자식
  • 부모 프로세스는 자식 프로세스의 PID값, 자식 프로세스는 0을 반환한다

자식 프로세스의 생성 - 출처는 아래 참고 링크

운영체제가 프로세스를 종료하는 경우

  • 프로세스가 운영체제의 종료 서비스(exit())를 호출해 정상 종료되는 경우
  • 프로세스의 실행 시간 또는 특정 이벤트 발생을 기다리는 시간이 제한된 시간을 초과한 경우
  • 프로세스가 파일 검색 또는 입출력에 실패한 경우
  • 오류가 발생하거나 메모리 부족등이 발생하는 경우

부모 프로세스가 자식 프로세스를 종료시키는 경우

  • 자식 프로세스가 할당된 자원을 초과해 사용할 때
  • 자식 프로세스에 할당된 작업이 없을 때

 

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t child_pid;
    
    child_pid = fork(); // 프로세스 복제

    if (child_pid == 0) {
        // 자식 프로세스 코드 영역
        printf("자식 프로세스 (PID: %d)\n", getpid());
    } else if (child_pid > 0) {
        // 부모 프로세스 코드 영역
        printf("부모 프로세스 (자식 PID: %d, 부모 PID: %d)\n", child_pid, getpid());
    } else {
        perror("fork 실패");
    }

    return 0;
}
  1. 부모 프로세스 (Parent Process):
    • 먼저 부모 프로세스가 존재합니다.
    • 부모 프로세스는 fork 함수를 호출합니다.
  2. fork 함수 호출:
    • fork 함수 호출로 인해 새로운 프로세스가 생성됩니다.
  3. 프로세스 복제:
    • 새로운 프로세스가 부모 프로세스를 복제합니다. 이 복제는 코드와 데이터의 복사본을 생성합니다.
  4. 부모 프로세스와 자식 프로세스:
    • 부모 프로세스와 자식 프로세스는 각각의 실행 경로를 가집니다.
    • 부모 프로세스는 원래 코드 경로를 따라 진행하고, 자식 프로세스는 0을 반환하며 다른 코드 경로를 따라 진행합니다.
  5. PID (프로세스 식별자):
    • 부모 프로세스는 fork 함수의 반환 값을 통해 자식 프로세스의 PID를 얻을 수 있습니다.
    • PID는 각 프로세스를 고유하게 식별하는 데 사용됩니다.
  6. 결과 출력:
    • 부모 프로세스와 자식 프로세스는 각각 다른 출력을 생성합니다. 이를 통해 두 프로세스가 병렬로 실행되고 서로 다른 코드 경로를 가지는 것을 확인할 수 있습니다.

 

 

참고 링크 :

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jk130694&logNo=220690355283

 

[운영체제] 프로세스 생성

운영체제가 프로그램을 선택하여 수행하기 시작하려면 즉, 새로운 프로세스를 생성하고 추가하려면...

blog.naver.com

https://chlgpdus921.github.io/operating%20system/Chapter2_Process2/

 

[운영체제] PCB와 프로세스 생성

운영체제 PCB와 fork()명령어에 대해 알아보자

chlgpdus921.github.io