새소식

운영체제

프로세스의 개념 및 API

  • -

1. 프로세스 (Process)란?

프로세스란 실행중인 프로그램입니다.

그럼 프로그램은 무엇일까? 

프로그램은 디스크 상에 존재하며 실행르 위한 명령어와 정적 데이터의 묶음입니다.

2. 프로세스 생성

프로그램 실행을 위하여 운영체제가 하는 첫 번째 작업은 프로그램 코드와 정적 데이터 (ex 초기값을 가지는 변수) 를 메모리, 프로세스의 
주소공간에 load 하는 것입니다.

프로그램은 디스크 또는 SSD에 특정 실행 파일 형식으로 존재합니다. 

코드와 정적 데이터를 메모리에 탑재하기 위해서 운영체제는 디스크의 해당 바이트를 읽어서 메모리의 어딘가에 저장해야 합니다.


코드와 정적 데이터가 메모리에 load된 후, 프로세스를 실행시키기 전에 일정량의 메모리가 프로그램의 실행시간 스택 용도로 할당되어야 합니다.


운영체제는 또 입출력과 관계된 초기화 작업을 수행합니다.


예를 들어, Unix 시스템에서 각 프로세스는 기본적을 표준입력 ,표준출력, 표준에러 장치에 해당하는 3개의 파일 디스크립터를 갖습니다.


이 디스크립터를 사용하여 프로그램은 터미널로부터 입력을 읽고 화면에 출력을 프린트하는 작업을 쉽게 할 수 있습니다.


이 모든 작업을 마치게 되면 운영체제는 프로그램 실행을 위한 준비를 마치게 됩니다.


이제 프로그램의 시작 지점, 즉 main()에서부터 프로그램을 실행하는 작업만이 남는 것입니다.



3. 자료구조


1) context switch (문맥교환)

-> register context 자료구조는 프로세스가 중단되었을 때 해당 프로세스의 레지스터값들을 저장합니다.


    이 레지스터값들을 복원하여 운영체제는 실행르 재개합니다. 이를 context switch라고 합니다.


2) 좀비(zombie) 상태

-> 프로세스는 종료되었지만 메모리에 남아있는 상태인 최종(final) 상태

    

    이 상태는 프로세스가 성공적으로 실행했는지를 다른 프로세스 (보통 부모프로세스)가 검사하는 데 유용합니다.


    (Unix 기반 시스템에서는 프로세스가 성공적으로 종료되었으면 0, 그렇지 않으면 0이 아닌 값을 반환합니다.)

'운영체제' 카테고리의 다른 글

fork(), exec(), pipe()에 대한 정리  (0) 2018.09.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.