[CS] 운영체제 , 프로세스&스레드

2023. 5. 28. 14:08CS

운영체제란 ?

컴퓨터 하드웨어와 응용 프로그램 간의 인터페이스를 제공하고 시스템 자원을 관리하는 역할을 합니다.

 

운영체제를 알기 위해서는 shellkernel의 이해가 필수적입니다.

OS = shell(사용자 인터페이스) + kernel(하드웨어 관리)

 

운영체제 역할

쉘과 커널은 운영체제의 중요한 구성 요소이며, 사용자와 시스템 간의 상호작용과 시스템 자원의 효율적인 관리를 가능하게 합니다.

 

쉘과 커널의 역할

사용자는 쉘을 통해 명령어를 입력하여 원하는 작업을 수행하고, 쉘은 이를 해석하여 커널에 요청하고 결과를 반환받습니다.

커널은 이러한 요청을 처리하고 하드웨어와 상호작용하여 시스템의 기능을 제공하며, 운영체제의 안정성과 성능을 유지합니다.

 

1. 쉘(Shell):

 

  • 사용자와 운영체제 간의 인터페이스 역할
  • 사용자가 명령어를 입력하고 실행할 수 있도록 제공
  • 명령어 해석 및 실행을 담당
  • 대화형 또는 스크립트 형태로 사용
  • 일반적인 쉘에는 Bash, PowerShell, zsh 등이 있음

2. 커널(Kernel):

 

  • 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 사이의 인터페이스 역할
  • 시스템 리소스를 관리하고, 프로세스, 메모리, 파일 시스템, 입출력 장치 등의 관리를 담당
  • 하드웨어와 상호작용하여 프로세스 스케줄링, 메모리 할당, 입출력 처리 등의 작업을 수행
  • 커널은 운영체제의 핵심 기능을 제공하며, 안정성과 보안을 유지하고 시스템 자원을 효율적으로 관리

 

 

운영체제 주요 기능

 

  • 프로세스 관리
  • 메모리 관리
  • 파일시스템 관리
  • 입출력 관리
  • 네트워킹
  • 보안

 

1. 프로세스 관리

프로세스란? 프로세스는 메인 메모리에 할당되어 실행중인 상태인 프로그램을 말합니다.

운영체제는 프로세스 생성, 스케줄링, 중지 등의 작업을 통해 여러 프로그램이 동시에 실행될 수 있도록 합니다.

 

1.2 프로세스 상태

 

프로세스 상태 전이도

  • New: 프로그램이 메인 메모리에 할당된다.
  • Ready: 할당된 프로그램이 초기화와 같은 작업을 통해 실행되기 위한 모든 준비를 마친다.
  • Running: CPU가 해당 프로세스를 실행한다.
  • Waiting: 프로세스가 끝나지 않은 시점에서 I/O로 인해 CPU를 사용하지 않고 다른 작업을 한다. (해당 작업이 끝나면 다시 CPU에 의해 실행되기 위해 ready 상태로 돌아가야 한다.)
  • Terminated: 프로세스가 완전히 종료된다.

 

1.3 PCB(Process Control Block)

프로세스에 대한 모든 정보가 모여있는 곳

각 프로세스가 생성될때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB 는 제거됩니다.

CPU는 한 프로세스가 종료될 때까지 수행하는 것이 아니라 여러 프로세스를 중간 중간에 바꿔가면서 수행합니다. 그러므로 CPU는 수행중인 프로세스를 나갈 때, 이 프로세스의 정보를 어딘가에 저장하고 있어야 다음에 이 프로세스를 수행할 때 이전에 수행한 그 다음부터 이어서 작업할 수 있습니다. 이러한 정보를 저장하는 곳이 PCB입니다.

 

1.4 프로세스 큐(Queue)

프로세스는 수행하면서 상태가 여러 번 변하는데 이에 따라 서비스를 받아야하는 곳이 다르다. 그리고 프로세스는 일반적으로 여러 개가 한 번에 수행되므로 그에 따른 순서가 필요하다. 이러한 순서를 대기하는 곳을 큐(queue)라고 부른다.

 

  • Job Queue: 하드디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐이다.
  • Ready Queue: CPU 점유 순서를 기다리는 큐이다.
  • Device Queue: I/O를 하기 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 각각 존재한다.

위와 같이 여러 큐가 존재하는데, 각 큐 내부에 저장된 실제 데이터는 각 프로세스의 PCB가 저장되어 있다. 그리고 이러한 순서를 기다리는 공간이 있다면 이 순서를 정해주는 알고리즘이 있어야 합니다. 이러한 알고리즘을 스케줄링(Scheduling)이라 합니다.

 

프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있는데, 실제로는 스레드(thread) 단위로 스케줄링을 합니다.

1.5 스레드(Thread)

  • 프로세스 하나만을 사용해서 프로그램을 실행하기에는 메모리의 낭비가 발생합니다. 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동합니다.
  • 즉, 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위입니다. 스레드는 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령어의 가장 작은 시퀀스입니다. 하나의 프로세스는 하나 이상의 스레드를 갖고 있습니다.

프로세스와 스레드의 차이점

운영체제는 프로세스마다 독립된 메모리 영역을 Code/Data/Stack/Heap의 형식으로 할당합니다. 각각 독립된 메모리 영역을 할당해주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없습니다.

 

이와 다르게, 스레드는 메모리를 서로 공유할 수 있습니다.

자세히 말하자면 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 다로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공합니다. 따라서, 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 됩니다.

 

정리하자면, 프로세스는 운영체제로부터 별도의 메모리 영역을 할당 받고

스레드는 Stack 을 제외한 Code/Data/Heap 부분은 공유해 서로 읽고 쓸 수 있게 됩니다. (공유자원을 가집니다.)

'CS' 카테고리의 다른 글

[CS] 교착상태와 기아상태  (0) 2023.06.11
[CS] 세마포어와 뮤텍스  (1) 2023.06.07