우리가 흔히 말하는 프로그램이란 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 상태이며 컴퓨터에서 실행되는 명령어 모음이 들어 있는 데이터 덩어리를 의미한다. 그것을 더블클릭하여 실행시키기 전까지는 프로그램 자체로는 아무런 의미가 없다. 프로그램을 실행하면 프로그램 안에 들어 있는 명령어가 한 줄씩 실행되면서 프로그램은 뭔가 활동을 하는 상태가 된다. 이를 프로세스라고 한다.
Q. 프로세스와 스레드에 대해서 설명해주세요.
1. 프로세스(Process)
- 운영체제로부터 자원(프로세서, 필요한 주소 공간, 메모리 등)을 할당받는 작업의 단위이자 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
- 프로그램이 메모리에 올라가면 프로세스가 인스턴스화(독립적인 개체)가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다.
※ ex) Pinko.exe 실행파일을 두 번 클릭하면 Pinko'프로세스'가 시작된다.
- 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당 받는다.
- 각 프로세스는 별도의 주소 공간에 실행되고, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
( 프로세스의 상태 )
생성(create) | - fork( ) 또는 exec( )함수를 통해 생성함. PCB가 할당됨. - fork( ) 부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수. 주소 공간만 복사할 뿐이지 부모 프로세스의 비동기 작업등을 상속하지는 않는다. - exec( ) 새롭게 프로세스를 생성하는 함수이다. |
대기(ready) | - 메모리 공간이 충분하면 메모리를 할당받고 아니면 아닌 상태로 대기하고 있으며 CPU스케줄로부터 CPU소유권이 넘어오기를 기다리는 상태이다 |
대기 중단(ready suspended) | - 메모리 부족으로 일시중단된 상태이다. |
중단(blocked) | - 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태.I/O 디바이스에 의한 인터럽트로 이런 현상이 많이 발생된다. |
일시 중단(block suspended) | - 중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단된 상태이다. |
실행(running) | |
종료(terminated) | - 메모리와 CPU 소유권을 모두 놓고 가는 상태를 말한다. 부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료(abort)로 종료되는것도 있다 |
Q. PCB?
프로세스 제어 블록(Process Control Block)은 운영체제에서 프로세스에 대한 메타데이터를 저장한 '데이터'를 말한다. 프로세스의 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다.
Q. 메타데이터?
메타데이터(metadata)는 데이터에 대한 데이터이다. 대량의 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 컨텐츠에 대하여 부여되는 데이터이다.
2. 스레드(Thread)
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만(-> 이는 각 스레드에서 실행되는 함수의 로컬 변수들이 스레드 마다 있다는 의미), 힙 메모리는 서로 읽고 쓸 수 있다.
- 멀티 스레드: 하나의 프로그램 안에서 여러 작업을 해결하는 것.
- 콘텍스트 스위치(context switch) : 여러 프로세스와 여러 스레드를 동시에 실행해야 하는 운영체제는 이렇게 여러 프로세스와 각 프로세스 안에 있는 스레드들을 일정 시간마다 번갈아 가면서 실행하는 것. 즉, 각 스레드를 실행하다 말고 다른 스레드를 마저 실행하는 과정을 콘텍스트 스위치라고 한다. 컨텍스트 스위치 실행은 기본적으로 '사람 입장에서 쾌적할 수 있는' 가급적 긴 시간으로 이루어 진다. 이 시간 단위를 타임 슬라이스(time slice)라고 한다. CPU개수와 스레드의 개수가 같거나 스레드 개수가 더 적으면 컨텍스트 스위치가 발생할 이유가 업지만 스레드 개수가 더 많으면 반드시 어느 CPU 안에서는 발생한다. (Runnable 실행중의 스레드가 cpu개수보다 많을 경우에만 성능 문제가 발생.)
Q. 메인 스레드가 먼저 종료되면 어떻게 될까?
메인 스레드가 이미 종료되었지만, 다른 스레드가 아직 뭔가를 하고 있어 프로세스는 종료하지 않고 계속 남아 있는 상황이 된다. 이를 좀비 프로세스라고 한다.
Reference.
도서 1 : 게임 서버 프로그래밍 교과서 (길벗, 배현직)
도서 2 : 면접을 위한 CS 전공지식 노트 (길벗, 주홍철)
'👨🏻💻 programming > ◽ 운영체제' 카테고리의 다른 글
(OS) CPU 스케줄링 (0) | 2022.12.13 |
---|---|
(OS) TCP/IP, UDP 계층구조, OSI (2) | 2022.09.20 |
(OS) 네트워크 기초 (0) | 2022.09.07 |
(OS) 운영체제와 메모리 (0) | 2022.07.29 |
(OS) 자료형, 데이터 크기 및 정수 제한 <limits> (1) | 2022.07.06 |
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!