Showing

[CS:APP] 컴퓨터 시스템 1장 : 프로세스 실행과 종료 관점에서 프로세서와 운영체제 역할 차이점 정리 본문

컴퓨터 공학, 전산학/컴퓨터시스템

[CS:APP] 컴퓨터 시스템 1장 : 프로세스 실행과 종료 관점에서 프로세서와 운영체제 역할 차이점 정리

RabbitCode 2023. 3. 21. 15:39

 

1.  Hello👋  CS:APP

 안녕하세요! FlyDuck Dev🦢입니다.

오늘은 CS:APP 1장에 나온 용어들(프로세스, 프로세서, 운영체제) 간의 관계를 정확하게 이해하기 위해 찾아본 바를 정리해보는 식으로 포스팅을 진행해보고자합니다.😊 특히 프로세스의 실행과 종료 시점에서 운영체제와 프로세서의 역할의 차이점에 대해서 집중적으로 포스팅해보았습니다.

 

 


CS:APP 소개: 컴퓨터 시스템은 하드웨어와 시스템 소프트웨어로 구성되며, 이들이 함께 작동하여 응용프로그램을 실행한다. 시스템의 구현방법은 시간에 따라 바뀔 수 있지만, 근본적인 개념들은 변하지 않는다. 모든 컴퓨터 시스템들은 유사한 기능을 수행하는 유사한 하드웨어와 소프트웨어 컴포넌트를 가지고 있다. 이 책은 프로그래머들로 하여금 이들 컴포넌트들이 어떻게 동작하고 프로그램의 성능과 정확성에 어떤 영향을 주는지 이해하도록 하여 프로그램을 더 잘 개발할 수 있도록 하기 위해서 쓰여졌다.

 

page 2.


cs:app 1장 컴퓨터 시스템으로의 여행 목차

 

2. 프로그램 vs 프로세스 vs 프로세서

 

윈도우, 유닉스나 리눅스 등의 운영체제가 있습니다. 프로그램들은 디스크 '파일' 같은 형태로 저장이 되어 있습니다. 이러한 프로그램은 저장되어 있으되, 단순한 데이터의 집합이 아니라 실행이 가능한 코드(개발자가 작성한 명령어 묶음)이지만 실행하기 전에는 생명력이 없습니다. 이러한 프로그램이 실행이 되어야지만 비로소 '프로세스'라고 할 수 있습니다. 즉, 운영체제(OS)가 실행한 프로그램이어야 프로세스이고 운영체제가 실행하지 않아서 그저 디스크에 상주하는 명령어 묶음(프로그램)은 프로세스가 아닌 프로그램입니다.

 

 

정리하자면,

프로세스 : 메모리에 올려져서, 실행 중인 프로그램
프로그램 : 개발자가 작성한 코드 묶음.
프로세서 : CPU

 

프로세스, 프로세서, 운영체제 각 개념에 대해서 아래 더 자세하게 작성해보도록 하겠습니다.

 

 

3. 프로세스

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=zkd1750&logNo=90193480486 프로세스는 스택(Stack), 힙(Heap), 데이터(Data), 코드(Code)로 나뉜다.
https://mintnlatte.tistory.com/396

 

(1) 프로세스(Process)는 할당받아야 실행된다

프로세스는 쉽게 말해 '실행 중인 프로그램'입니다. 프로세스는 CPU 실행할 명령어들을 포함하고 있는 프로그램 코드와 함께 데이터와 스택 등의 메모리 공간을 가지고 있습니다. (운영체제가 할당) 그러면, CPU가 메모리에 올라가 있는 코드와 데이터를 읽어와 처리합니다

 

프로세스는 운영체제에 의해 메모리도 할당받고 cpu도 할당받는다의 의미

프로세스는 운영 체제에서 실행될 수 있도록 메모리 공간을 할당받고, CPU 시간을 할당받아 실행됩니다.

프로세스는 실행되기 위해 메모리 공간을 필요로 하며, 이를 위해 운영 체제는 프로세스에 필요한 메모리 공간을 할당합니다. 이때, 운영 체제는 프로세스의 크기, 요구 메모리 등을 고려하여 적절한 위치에 메모리를 할당하게 됩니다.

 

또한, 프로세스는 CPU 시간을 필요로 하며, 이를 위해 운영 체제는 CPU를 할당합니다. 운영 체제는 다양한 스케줄링 알고리즘을 사용하여 CPU 시간을 적절하게 할당하며, 프로세스가 실행 중이더라도 다른 프로세스가 CPU를 사용할 수 있도록 관리합니다.

따라서, 프로세스는 운영 체제에 의해 메모리도 할당받고, CPU 할당받아 실행됩니다.

 

https://velog.io/@kimhankyu/ostep4.-Processes%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EA%B0%9C%EB%85%90

 

(2) Process State(프로세스 상태) vs Process Context(프로세스 문맥)

  • 프로세스 상태(Process State)는 현재 실행 중인 프로세스의 상태를 나타냅니다. 이는 프로세스의 상태를 추적하고 관리하기 위해 운영 체제에서 사용되는 정보입니다. 프로세스 상태는 대개 실행, 대기, 중단, 종료 등의 상태를 가집니다.
  • 프로세스 컨텍스트(Process Context)는 실행 중인 프로세스의 상태를 유지하기 위해 필요한 모든 정보를 포함하는 데이터 세트입니다. 이 정보에는 프로세스가 사용하는 레지스터, 스택, 메모리 할당, 파일 및 디바이스 상태 등이 포함됩니다. 

, 프로세스 상태는 프로세스가 현재 어떤 상태에 있는지를 나타내는 비해, 프로세스 컨텍스트는 프로세스가 이전 상태로 돌아갈 있도록 모든 필수 정보를 저장하고 유지하는 역할을 합니다

-1- Process State

현재 프로세스가 어떤 상태에 있는지를 나타냅니다. 프로세스는 다음과 같은 상태를 가질 수 있습니다.

  1. New: 새로운 프로세스가 생성되었지만, 아직 초기화가 완료되지 않은 상태입니다.
  2. Ready: 프로세스가 실행 준비가 완료된 상태로, CPU를 할당받기를 기다리고 있는 상태입니다.
  3. Running: CPU를 할당받아 실행 중인 상태입니다.
  4. Waiting: 프로세스가 어떤 이벤트(입출력 요청, 시그널 등)를 기다리고 있는 상태입니다.
  5. Terminated: 프로세스의 실행이 완료되었거나, 강제로 종료되었거나, 또는 오류가 발생하여 종료된 상태입니다.

 

(3)  Process Context ? Hardware Context? Process Control Block?

프로세스 컨텍스트에서 엮여 나오는 개념이 하드웨어 컨텍스트와 프로세스 제어블록입니다. 이 부분을 한번 정리해보았습니다.

 

포함 관계 :  프로세스 제어 블록 (PCB, Process Control Block) 운영 체제에서 프로세스를 관리하기 위해 필요한 정보를 저장하는  사용되며, 프로세스 컨텍스트는 PCB 포함됩니다. 하드웨어 컨텍스트는 프로세스의 하드웨어 레지스터 상태를 저장하는  사용되는데, 프로세스 컨텍스트는 프로세스의 하드웨어 컨텍스트도 포함하고 있습니다.

 

따라서, 프로세스 컨텍스트는 PCB 내부에 저장되며, PCB는 운영 체제가 프로세스를 관리하는 데 중요한 역할을 합니다.

 

 

PCB(Process Control Block)

  • PCB는 운영 체제에서 프로세스를 관리하기 위해 사용하는 데이터 구조체입니다.
  • PCB에는 프로세스의 상태 정보, 프로세스 식별자, 우선 순위, 메모리 할당 정보, 입출력 상태 등의 정보가 포함됩니다.
  • 운영 체제에서 프로세스를 생성할 때 PCB가 할당되며, 프로세스가 종료될 때 제거됩니다.
  • 커널의 주소 공간에 있으며 운영 체제가 프로세스를 스케줄링하고, 다른 프로세스 간에 자원을 공유하고, 에러 처리 등을 수행하는 데 필요합니다. 아래는 구체적인 포함 정보들입니다.
커널 p.16: 하나의 프로세스에서 다른 프로세스로의 전환은 운영체제 커널에 의해 관리된다. 커널은 운영체제 코드의 일부분으로 메모리에 사웆한다. 응용 프로그램이 운영체제에 의한 어떤 작업을 요청하면, 컴퓨터는 파일 읽기나 쓰기와 같은 특정 시스템 콜을 실행해서 커널에 제어를 넘겨준다. 그러면 커널은 요청된 작업을 수행하고 응용프로그램으로 리턴한다. 커널은 별도의 프로세스가 아니라는 점에 유의해야 한다. 대신, 커널은 모든 프로세스를 관리하기 위해 시스템이 이용하는 코드와 자료구조의 집합이다.

커널: https://it.itbank.ne.kr/entry/%EC%BB%A4%EB%84%90%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%82%B4%ED%8E%B4%EB%B3%BC%EA%B9%8C%EC%9A%94

1) 운영체제가 관리상 사용하는 정보

 - Process state 

 - Process ID

 - Scheduling information : 프로세스의 중요도, 스케줄링 큐 포인터 등 스케줄링 파라미터 정보

 - Priority : 프로세스의 우선순위

 

2) CPU 수행 관련 하드웨어 값

 - Program counter : 해당 프로세스가 이어서 실행해야 할 명령의 주소를 가리키는 포인터

 - Register : 프로세스가 인터럽트 이후 올바르게 작업을 이어가기 위해 참조하는 CPU 레지스터 값

 

3) 메모리 관련

 - Code, Data, Stack의 위치 정보, base/limit 레지스터 값

 

4) 파일 관련

 - open file descriptors : 열린 파일 목록

 

위와같이 프로세스의 상태를 구성하는 다양한 요소들을 포함하고 있으며, 프로세스 컨텍스트를 통해 해당 프로세스가 다시 실행될 , 이전 실행 상태를 복원할  있습니다. 컨텍스트 스위칭(Context Switching)은 하나의 프로세스가 다른 프로세스로 대체될 때, 이전 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 복원하는데 사용됩니다. 

 

프로세스 컨텍스트(Process Context)

  • 프로세스 컨텍스트는 프로세스의 상태를 저장하고 관리하는 데이터 구조체입니다.
  • 프로세스 컨텍스트는 PCB에 포함되며, 프로세스의 하드웨어 상태 정보를 포함합니다.
  • 이러한 하드웨어 상태 정보는 프로세스가 실행 중 중단되어 다른 프로세스에게 CPU를 양보하고, 다시 실행될 때 이전 상태로 복원하는 데 사용됩니다.

하드웨어 컨텍스트(Hardware Context)

  • 하드웨어 컨텍스트는 프로세스가 CPU를 사용하는 동안 하드웨어 레지스터의 상태 정보를 저장하는 데 사용되는 개념입니다.
  • 하드웨어 컨텍스트에는 프로세스의 레지스터 값, 스택 포인터, 프로그램 카운터 등이 포함됩니다.
  • 프로세스가 인터럽트나 시스템 호출 등으로 실행을 중지하고, 나중에 다시 실행될 때 이전 상태로 복원하는 데 사용됩니다.

하드웨어 문맥(Hardware Context)으로는 프로그램 카운터(Program Counter)각종 레지스터(Register)가 있습니다. 이들을 이용하여 해당 프로세스가 어디까지 실행되었는지를 알 수 있습니다. 하드웨어 컨텍스트(Hardware Context)는 CPU의 레지스터 값 등을 포함하며, 프로세스가 CPU를 사용하다가 다시 실행될 때, 이전 실행 상태를 복원하는 데 사용되어, 여러 프로세스가 동시에 실행되는 것처럼 보이도록 할 수 있습니다.

 

프로그램 카운터(Program Counter)

현재 실행 중인 명령어의 메모리 위치를 가리키는 레지스터입니다. 각종 레지스터(Register)는 CPU가 명령어를 처리하는 데 필요한 데이터를 저장하는 레지스터로, 예를 들어, 산술 연산에 사용되는 레지스터, 주소 값을 저장하는 레지스터 등이 있습니다.

 

 

 

4.  프로세스 실행 관점에서 운영체제프로세서의 역할

p.16 hello 프로그램을 실행하라는 명령을 받으면 쉘은 시스템 콜이라는 특수 함수를 호출하여 운영체제로 제어권을 넘겨준다. 운영체제는 쉘의 컨텍스트를 저장하고 새로운 hello 프로세스와 컨텍스트를 생성한 뒤 제어권을 새 hello 프로세스로 넘겨준다. hello가 종료되면 운영체제는 쉘 프로세스의 컨텍스트를 복구시키고 제어권을 넘겨주면서 다음 명령 줄 입력을 기다린다.

 

프로세스는 운영체제에 의해 실행되며, CPU가 프로세스가 요청한 작업을 수행합니다.

운영체제는 프로세스가 실행되기 위해 필요한 메모리를 할당하고, 프로세서는 해당 메모리에 있는 코드 데이터를 읽어와서 연산을 수행합니다. 그리고 운영체제는 CPU 스케줄링을 통해 여러 프로세스를 번갈아 가며 실행시켜 프로세서가 효율적으로 작업을 처리할 있도록 합니다.

 

(1) 운영체제

운영체제는 하드웨어를 관리한다 (cs:app 1.7 주제)

운영체제는 메인 메모리를 관리하여, 프로세스가 필요로 하는 메인 메모리를 할당(제공)합니다. 메인 메모리는 프로세스가 실행 중인 코드와 데이터를 보관하는 임시 저장소이기 때문에, 운영체제는 메모리의 효율적인 사용을 위해 프로세스의 메모리 할당 및 해제를 담당하게 됩니다. 이를 통해 여러 프로세스가 메모리를 공유하면서 최대한 효율적으로 메모리를 사용할 수 있습니다.

 

요약하면, 운영체제는 프로세스를 생성하고, 메모리를 할당하며, 입출력 장치 등 다양한 시스템 자원을 관리하며, CPU 스케줄링을 통해 여러 프로세스를 번갈아 가며 실행시키는 역할을 합니다.(CPU와 메모리 자원을 적절히 할당하고 관리하여 수행)

 

CPU가 메모리에서 프로그램 코드와 데이터를 가져와서 처리할 때, 운영체제의 역할은 다음과 같습니다.

  1. 메모리 관리: 운영체제는 메모리를 관리하여, 프로세스가 필요로 하는 메모리를 할당하고 해제합니다. 이를 통해 CPU가 메모리에서 프로그램 코드와 데이터를 가져올 수 있도록 합니다.
  2. 프로세스 관리: 운영체제는 실행 중인 프로세스를 추적하고, 이들의 우선순위를 관리하며, 필요한 경우에는 다른 프로세스로 전환하여 실행합니다.
  3. 스케줄링: 운영체제는 CPU의 사용을 조정하여, 여러 개의 프로세스가 동시에 실행될 수 있도록 스케줄링합니다. CPU는 한 번에 하나의 프로세스만 실행할 수 있으므로, 운영체제는 이를 조정하여 프로세스가 공평하게 CPU를 사용할 수 있도록 합니다.
  4. 입출력 관리: 운영체제는 입출력 장치의 사용을 관리하여, 프로세스가 입출력 작업을 수행할 수 있도록 합니다. 이를 통해 프로세스가 메모리에서 데이터를 가져와서 처리하고, 처리한 결과를 다시 메모리에 저장할 수 있습니다.
  5. 예외 처리: 운영체제는 프로세스 실행 중 예외 상황(예: 0으로 나누기, 잘못된 주소 접근 등)을 처리합니다. 이를 통해 프로세스가 비정상적으로 종료되는 것을 방지하고, 시스템 전체의 안정성을 유지합니다.
  6. 보안 및 안전성 유지: 운영체제는 시스템의 보안 및 안전성을 유지하기 위해, 권한 부여 및 제한, 악성 코드 검사 등의 작업을 수행합니다.
  7. 자원 관리: 운영체제는 CPU, 메모리, 입출력 장치 등 시스템 자원을 관리하고, 프로세스들이 이를 공유하도록 합니다.

따라서, CPU가 프로세스를 실행하는 동안에도 운영체제는 여러가지 작업을 수행하여, 시스템이 안정적으로 동작할 수 있도록 합니다.

 

 

 

(2) 프로세서(CPU)

프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다 (cs:app 1.4 주제)

프로그램의 자원들이 메모리에 올라오고, 실행되어야 할 코드의 메모리 주소를 CPU의 레지스터로 올리는 것 https://yoongrammer.tistory.com/51

 

현대의 거의 모든 컴퓨터들은 폰노이만 구조를 하고 있기 때문에 디스크나 하드 드라이브와 같은 보조 저장장치에 저장된 프로그램을 바로 CPU로 전달할 수 없습니다.

 

폰 노이만 구조(Von Neumann Architecture) 구조에서는 프로그램 코드와 데이터 모두 보조 저장장치에서 메인 메모리로 올리고 CPU는 메모리에 올라간 프로그램(프로그램 코드와 데이터)을 실행합니다. 이를 '로딩(loading)'이라고 합니다. CPU는 메인 메모리에서 한 번에 하나의 명령어를 가져와서 실행하며, 이를 '명령어 사이클(instruction cycle)'이라고 합니다. 이 과정에서 CPU는 프로그램 카운터(program counter)라는 레지스터를 사용하여 다음 실행할 명령어의 위치를 기억합니다. 따라서, 메인 메모리는 CPU가 프로그램 코드와 데이터를 처리할 수 있도록 필수적인 역할을 합니다.

 

 

 

5.  프로세스 종료 관점에서 운영체제 프로세서의 역할

 

프로세스를 종료하는 것은 운영체제가 담당합니다. 프로세스가 실행 중일 때, 운영체제는 해당 프로세스를 계속 추적하면서, 프로세스가 종료되어야 하는 경우를 감지합니다. 예를 들어, 프로세스가 작업을 완료하거나, 오류가 발생하여 더 이상 진행할 수 없는 경우 등이 이에 해당합니다. 그렇게 운영체제가 종료 신호로 말미암아, 해당 프로세스를 강제로 종료시킵니다.

그러면 CPU는 운영체제가 프로세스를 종료시키는 작업을 수행하는 데 필요한 연산을 수행하게 됩니다. 따라서, 프로세스를 종료하는 것은 운영체제가 담당하며, CPU는 이를 수행하는 데 필요한 작업을 수행하게 됩니다.

 

 

 

6.  (최종 정리) 프로세스 관점에서 운영체제 프로세서의 관계와 역할

 

포스팅이 길어졌습니다. 요약하자면 현대의 거의 모든 컴퓨터들은 폰노이만 구조를 하고 있기 때문에 디스크에 있는 프로그램을 바로 CPU로 전달할 수 없습니다. 따라서 운영체제는 메인 메모리를 관리하여 프로세스가 필요로 하는 메모리를 할당하고 해제합니다. 프로그램이 디스크에 저장되어 있을 때 운영체제는 메모리에 올려서 실행합니다. 프로세스가 메모리에서 코드들을 한 줄씩 CPU에 전달하여 실행하게 되면, CPU가 프로세스를 계속해서 처리합니다.

CPU는 프로세스를 직접 실행하는 역할을 하지만, 운영체제는 다양한 작업을 통해 CPU가 실행하는 프로세스들을 지켜보고, 관리합니다.

CPU가 프로세스를 실행하면 운영체제는 이를 추적하면서 해당 프로세스가 자원을 합리적으로 사용하는지, 시스템의 안정성과 보안을 해치지 않는지 등을 확인하고 조정합니다. 또한, CPU가 여러 프로세스를 번갈아가며 실행하도록 스케줄링하고, 프로세스 간의 자원 공유를 관리하기도 합니다. 따라서, 운영체제는 CPU와 프로세스 모두를 관리하며, 시스템 전체가 안정적으로 동작할 수 있도록 하는 역할을 합니다.

 

CPU는 운영체제가 스케줄링한 프로세스를 실행하는 역할을 합니다. 운영체제가 프로세스에 메모리를 할당해주면

  • CPU는 프로세스가 요청한 작업을 처리하는 중심적인 역할을 합니다. CPU는 메모리에서 프로그램 코드와 데이터를 가져와 실행하며, 프로세스가 필요로 하는 계산을 수행합니다. CPU는 또한 입출력 장치와 통신하면서 프로세스가 요청한 작업을 완료합니다.
  • 운영체제는 프로세스와 시스템 자원 사이의 매개체 역할을 합니다. 운영체제는 메모리를 할당하고 관리하여 프로세스가 필요로 하는 메모리를 제공합니다. 또한, 운영체제는 프로세스 간의 스케줄링, 입출력 장치의 관리, 파일 시스템의 관리 등의 작업을 수행합니다. 이러한 작업들은 CPU와 메모리 자원을 적절히 할당하고 관리하여 수행됩니다.

따라서, CPU 프로세스가 실행되는 동안 계산 작업을 처리하고, 운영체제는 프로세스와 시스템 자원 간의 상호작용을 관리합니다. 프로세스 실행에 중요한 역할을 하지만, 서로 다른 역할을 수행하고 있습니다.

 

 

 

지금까지 프로세스의 실행과 종료 시점에서 운영체제와 프로세서의 관계와 각 역할의 차이점을 정리해보았습니다.

 

포스팅 읽어주셔서 감사합니다!