운영체제 - 프로세스 1

yjkim·2023년 9월 2일
0

운영체제

목록 보기
2/7

ch2 프로세스 - 1

프로세스가 무엇인가

프로세스의 정의

프로세스란 현재 실행중인 프로그램을 의미함. 프로세스의 실행은 순차적으로 진행된다.

  • 크롬 브라우저를 실행시키는 경우 크롬은 하나의 프로세스로 실행되는것.

프로세스의 구성

  • 프로그램 코드 : Text section으로도 불림, 프로세스에서 가장 중요한 부분이며, 실행 가능한 명령어와 프로그램 코드가 저장된 영역이다. 이렇게 정의된 코드는 cpu에서 실행된다.
#include <stdio.h>  
// main() 함수와 그 안에 있는 코드 블럭이 바로 text section 
int main() {
    int a = 5;
    int b = 10;
    int sum = a + b;
    printf("Sum: %d\n", sum);
    return 0;
}
  • 데이터 : Data section, 정적 데이터( 전역변수, 정적변수 ) 초기화 데이터, 비초기화 데이터( 배열 , 포인터) ,상수, 문자열 등이 포함됨. 변수들이라고 생각하면 될듯, 알다시피 프로세스 실행 중 변경 가능.
#include <stdio.h>
int global_variable = 100;
// global_variable는 전역변수이며 이 변수가 저장되는 곳이 데이터 섹션.
int main() {
    return 0;
}
  • 스택 : Stack, 함수 호출 및 반환 정보, 지역 변수 , 매개 변수들을 저장하는데 사용됨.
int main() {
    // a,b,sum은 지역변수로 stack 에 저장됨.
    int a = 5;
    int b = 10;
    int sum = a + b;

    printf("Global Variable: %d\n", global_variable);
    printf("Sum: %d\n", sum);
    return 0;
}
  • 힙 : Heap, 동적으로 할당된 데이터를 저장하는데 사용됨.
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *dynamic_array;
    // malloc 함수를 사용하여 Heap 영역에 메모리를 할당시킴
    dynamic_array = (int *)malloc(5 * sizeof(int));

    if (dynamic_array == NULL) {
        printf("메모리 할당에 실패했습니다.\n");
        return 1;
    }
    return 0;
}

프로세스 상태

프로세스는 실행하면서 상태(state)가 변화함

  • new (생성중) : 프로세스가 생성되고 있는 상태
  • running (실행중) : 프로세스가 현재 cpu에서 실행되고 있는 상태
  • waiting (대기중): 프로세스가 특정 자원이나 이벤트를 기다리고 있는 상태
  • ready (준비중) : 프로세스가 cpu를 할당받을 준비가 된 상태
  • terminated (종료됨) : 프로세스가 실행을 마치고 종료된 상태. 종료된 프로세스는 더 이상 실행되지 않고 운영 체제에 의해 자원을 반환하고 정리됨.

Waiting과 Ready의 차이는 무엇?

ready는 준비가 다 된 상태이나 다른 애가 cpu를 먼저 쓰고 있어서 기다리는 상태이고, waiting은 I/O나 다른 이벤트가 발생하기를 기다리는 상태임.

예를 들어 우리가 게임을 한다고 치자. 우리가 게임을 하기 위해선 아이디랑 비밀번호를 치고 로그인을 해야함. 근데 로그인 되는 시간까지 이 게임을 running 상태에 올려놓고 있으면 cpu가 다른 작업을 못함. cpu는 비싼 자원으로 놀고 있는 시간이 최대한 발생하면 안됨. 그래서 로그인이 끝나기 전까지 waiting 상태로 바꿔놓고 그동안 다른 프로세스를 실행하는것.

  • 우리가 로그인을 아무리 빨리 한다고 쳐도 컴퓨터의 1초와 우리의 1초는 체감이 다르기 떄문에 의미없음.... 키보드 칠때 한글자 치고 1초 기다리고 다른 글자 칠수 있다고 하면 아마 카톡할때 정신이 나갈것. 이처럼 1초는 우리에게는 찰나이지만 컴퓨터에게는 매우 매우 긴시간.

Process Control Block (PCB)

각각 프로세스들의 정보를 담은 데이터 구조
task control block(TCB) 라고도 불림
"일반적으로" 하나의 프로세스에는 하나의 PCB 할당

구성 요소

  • 프로세스 상태 : runing, waiting 등등
  • 프로그램 카운터 : 다음 실행할 명령어의 주소를 나타냄
  • 레지스터 : 프로세스의 레지스터 값, 다시 실행할때 필요함
  • 스케줄링 정보 : 프로세스 우선순위, 스케줄링 알고리즘에 대한 정보
  • 메모리 관리 정보 : 메모리 할당 정보
  • 입출력 상태 정보 : 프로세스가 대기중인 입출력에 대한 정보 ( 파일 입출력 및 네트워크 통신 등)에 관한 정보

PCB의 예시

Process ID: 101
Process State: Ready
Program Counter (PC): 0x1234
Register State:
  - Register 1 (R1): 0x5678
  - Register 2 (R2): 0x9ABC
  - ...
Scheduling Information:
  - Priority: High
  - CPU Time: 10 ms
Memory Management Information:
  - Base Address: 0x8000
  - Limit Address: 0xA000
I/O State:
  - Waiting for Input
  - Last I/O Operation: Read File
  - File Descriptor: File001
Parent Process ID: 50
Child Process IDs: [102, 103]

CPU Switch From Process to Process

문맥 교환 (Context switching)

프로세스가 실행되다가 인터럽트(또는 system call)가 발생해 cpu를 다른 프로세스로 넘겨주는 과정. 이를 통해서 컴퓨터 시스템은 멀티태스킹을 지원하고 여러 프로세스가 동시에 실행될 수 있도록 하는것.

  • 주의
    시스템 콜이나 인터럽트가 발생한다고 무조건 문맥 교환이 발생하는것이 아니다. 다른 프로세스에 프로세서가 넘어가야 문맥 교환임.

다음에 이어서 ㄱ

profile
We may throw the dice, but the Lord determines how they fall

0개의 댓글