CS/OS 43

[운영체제] 4-2. 쓰레드 정의

오늘은 쓰레드에 대해서 알아보고, 이와 유사한 개념인 프로세스와의 차이점까지 알아보겠습니다. Thread 쓰레드는 프로세스 내부의 instruction의 집합을 의미합니다. 즉, 프로세스의 하위 개념으로 쓰레드가 존재하는 것이죠. 따라서, 리눅스에서는 lightweight process(경량화 프로세스)라고도 부릅니다. 프로세스가 어떻게 구성되어있는지 기억하시나요?? 프로세스는 stack, code, data, PCB로 구성되어있다고 설명드린 바 있습니다. 그렇다면 쓰레드는 어떻게 구성되어 있을까요?? 쓰레드의 구성요소는 다음과 같습니다. stack thread control block 쓰레드는 프로세스의 instruction set이라고 했으니까, 메서드가 존재할 것이고 그렇다면 지역변수를 저장할 공간..

CS/OS 2023.09.27

[운영체제] 4-1. 프로세스 종료, IPC

3장에서는 프로세스가 생성될 때의 과정에 대해서 다뤘습니다. 오늘은 그러한 프로세스가 종료되기 위해서 거치는 과정들에 대해 알아봅시다. Process Termination 우선, 언제 프로세스가 terminated 상태가 되는지 알아보자. 프로세스가 exit()라는 시스템 콜을 부를 때 프로세스가 다룰 수 없는 signal을 받았을 때 자식 프로세스가 더 이상 필요 없어서, 부모가 자식을 kill할 때 signal이란 프로세스끼리 이벤트가 발생했음을 알리는 수단을 의미합니다. exit() 시스템콜을 사용하여 프로세스를 종료하고 싶다면 아래의 순서로 진행됩니다. 1. OS에 의해서 종료될 프로세스의 자원이 회수됩니다. 여기서 PCB는 제외합니다. 2. 부모 프로세스에게 death-of-child 시그널을 ..

CS/OS 2023.09.27

[운영체제] 3-3. 프로세스 스위치

이번에는 프로세스 스위치에 대해서 알아보겠습니다. Process Switch 쉽게 말하면 CPU가 처리하는 프로세스가 A에서 프로세스 B로 바뀌는 행위를 프로세스 스위치라고 합니다. 이전에 프로세스의 정의에서 다뤘던 Dispatcher가 프로세스 스위치를 행합니다. 이전 글에서 우리는 프로세스 컨텍스트를 배웠습니다. 여기서 프로세스 스위치와 비슷한 개념인 Mode change가 있습니다. 이것에 대해 알아보고, 이 둘의 차이점에 대해 다뤄봅시다. Modes of Execution 우선 그 전에, 프로세스의 실행 모드에 대해서 알아보겠습니다. 프로세스의 실행 모드는 유저모드와 시스템 모드가 있습니다. 유저모드는 이전 글에서 다뤘던 User Context와 System Context에 대응되는 개념이라고 생..

CS/OS 2023.09.23

[운영체제] 3-2. 프로세스 생성

이번에는 프로세스가 생성되는 과정에 대해서 자세히 다뤄보겠습니다. 프로세스가 생성되는 과정 프로세스가 생성되는 과정을 단계별로 알아보겠습니다. 우선 프로세스는 fork()라는 시스템 콜로 인해서 만들어집니다. 물론 Idle Process라고 불리는 프로세스는 예외입니다. 이 예외 프로세스에 대해서는 마지막에 다루겠습니다. 그럼 이제, fork()를 실행하면 어떠한 과정으로 프로세스가 생성되는지 알아보겠습니다. 1. 새로운 프로세스를 위한 PCB 생성 가장 먼저, 프로세스를 생성하기 위해서는 PCB를 생성해야겠죠?? 프로세스 하나당 PCB 1개가 존재하니 말이죠. (PCB에 대해서 잘 모르신다면 이전 포스팅을 참고해주세요.) 그래서 프로세스를 생성하기 위해서 가장 먼저 PCB를 생성합니다. 2. 자식 프로..

CS/OS 2023.09.23

[운영체제] 3-1. 프로세스 컨텍스트

오늘은 프로세스 컨텍스트에 대한 글을 다뤄보겠습니다. 프로세스 컨텍스트(Process Context) 프로세스가 실행하기 위해 필요한 컴퓨터 내의 정보 및 구성요소의 집합입니다. 프로세스 컨텍스트는 크게 User Context, System Context로 나눌 수 있습니다. User Context 프로그램 작성자에 의해 결정되는 context입니다. User Context는 Code, Data, Stack으로 구성되어 있습니다. Code : 프로그램 작성자가 작성한 코드 자체를 의미합니다. Data : 프로세스의 전역변수를 말합니다. Stack : 프로세스 즉, 프로그램 내에 있는 함수의 인자, 지역변수, 프로세스에 있는 함수를 호출하는 레지스터의 값을 저장합니다. 우리가 아래와 어떤 C 프로그램을 짰..

CS/OS 2023.09.23

[운영체제] 2-4. PCB

오늘은 PCB(Process Control Block)에 대해서 정리해보겠습니다. Control Data Structures 운영체제에서 프로세스를 조작하기 위해 사용하는 데이터 구조입니다. 각 프로세스와 리소스의 현재 상태의 정보를 나타내고 있습니다. 우리는 그러한 자료구조는 PBC라고 부르기로 하였습니다. PCB(Process Control Block) PCB는 우측 그림과 같이 프로세스의 속성 정보들을 포함하고 있습니다. 식별자(Identifier) : 0부터 1씩 증가하며 정수값을 갖습니다. 식별자의 프로세스, 부모 프로세스의 식별자(만약 존재한다면!), 프로세스를 실행시키고 있는 사용자의 식별자, 프로세스 그룹의 식별자까지 저장합니다. -> 운영체제는 프로세스가 생성되면, 프로세스 그룹을 지정합..

CS/OS 2023.09.12

[운영체제] 2-3. 프로세스 상태도

이번 글에서는 프로세스의 상태도 대표적인 5가지와, 추가적인 2가지까지 해서 총 7가지를 알아보겠습니다. 우선, 이전 글에서 첨부했던 사진을 다시 떠올려봅시다. 여기서 대표적으로 Not Running과 Running 상태를 나타냈었는데, 우선 먼저 Not Running의 세부 상태에 대해서 설명하겠습니다. Not Running Ready - 실행되기를 기다리는 상태입니다. 뒤에 설명한 대기 큐에서 실행을 기다립니다 Blocked(= wait, sleep) - 이벤트가 발생되기를 기다리는 상태입니다. 대표적으로 이 때, 사용자의 입력을 기다리는 상태를 Block이라고 할 수 있습니다. 대기큐(Ready Queue)라는 단어를 잠깐 꺼냈는데, dispatcher(이 개념은 전에 설명했습니다.)가 항상 대기 ..

CS/OS 2023.09.11

[운영체제] 2-2. 프로세스 정의

앞선 많은 글에서 프로세스라는 단어를 몇번 언급한 적 있다. 이 글에서는 프로세스의 정의에 대해서 작성한다. 프로세스 현재 실행되고 있는 프로그램을 의미한다. 실행되지 않는 프로그램은 단지 프로그램일뿐 프로세스가 아니다. 프로세스는 메모리 내에서 크게 세가지 구성 요소를 가진다. 1. 프로그램의 실행 instruction이 모여있는 code 2. instruction의 실행 대상인 data 3. 실행에 필요한 운영체제의 자원들의 집합인 context 프로세스 상태 프로세스의 상태는 다음 글에서 더 자세히 다루겠지만, 우리는 dispatcher의 개념을 설명하기 위해 여기서 간단히 설명한다. 프로세스는 많은 상태를 갖고 있는다. 다음 글에서 총 7가지의 상태에 대해서 설명할테지만 여기서는 ready와 ru..

CS/OS 2023.09.11

[운영체제] 2-1. 커널 구조

운영체제의 커널 구조에는 2가지가 있다. Monolithic kernel과 micro kernel. 오늘은 이 두 가지에 대해서 간략하게 설명한다. 앞서, 커널에 대해서 자세히 설명하지 않은 것으로 기억하는데 커널이란 운영 체제 내에서 중요한 역할을 수행하는 함수들의 집합체라고 생각하면 된다. 운영체제 시간에서는 커널과 OS가 같은 의미로 이해해도 무방하다고 말한다. Monolithic Kernel mono에서 알 수 있듯이 단일체 커널을 의미한다. 앞서 커널은 여러개의 함수들의 집합체라고 설명한 바 있다. 이러한 많은 함수들이 커널 내에서 존재하는 형태를 의미한다. 이는, 커널의 구조가 커지므로 무겁다는 단점이 있지만, 모두가 커널 내에 있으므로 서로간의 상호작용이 원할하여 속도가 빠르다는 장점이 있다..

CS/OS 2023.09.11

[운영체제] 1-3. 타임 쉐어링

Time Sharing 이전 글에서 설명했던 상황을 다시 떠올려봅시다. multi-programming 방법에서도 분명한 단점이 있습니다. 만약 우리가 A 고객과 B 고객이 있다고 해봅시다. B 고객은 2초면 끝나는 작업이고, A 고객은 2분이 걸린다고 한다면, B를 먼저 처리하고, A를 처리해야 B를 조금 더 빨리 끝내줄 수 있겠죠. 간단하게 설명하면 이러한 방식이 Time Sharing입니다. 정확히는 time quantum(하나의 프로세스에게 할당되는 최대 허용 시간)을 정해둡니다. 이러한 time quantum 내에 프로세스가 끝나지 않게 되면 다른 프로세스를 처리하는 swap을 합니다. 이렇게 함으로써 mean response time(하나의 프로세스가 CPU에게 처리되는데 걸리는 시간)을 줄일..

CS/OS 2023.09.10