CS/OS 43

[운영체제] File

오늘은 File에 대해서 알아봅시다. File 파일은 보조 기억 장치에 저장되어서 전원이 꺼져도 지워지지 않는 저장 단위를 일컫습니다. FCB 우리는 전에 프로세스, 쓰레드 부분에서 PCB, TCB가 존재한다는 것을 알았습니다. 이와 같이 file도 FCB가 존재합니다. 이름만 다를 뿐 목적은 비슷하지만, 파일을 관리하기 위해 PCB, TCB와는 다른 정보들을 포함하고 있습니다. 기본적으로 file name, file size, create time 등.. 우리가 어떤 파일에 대해서 기본적으로 확인할 수 있는 정보들부터 자세한 정보들이 담겨있습니다. FCB와 PCB... 다른점이 분명 존재합니다. File와 FCB는 컴퓨터의 전원이 꺼져도 존재해야합니다. 그래서 이러한 정보들은 메인 메모리가 아닌 보조 ..

CS/OS 2023.10.28

[운영체제] Deadlock 처리

오늘은 앞선 글에서 다룬 Deadlock에 대해서 OS는 어떻게 처리하는지 알아봅시다. Deadlock을 처리하는 방법 Deadlock을 처리하는 방법에는 3가지가 있습니다. Deadlock이 발생되지 않도록 예방하는 방법 Deadlock이 발생되었다면 이를 감지하고 해결하는 방법 Deadlock이 발생되어도 아무것도 하지 않는 방법 Deadlock 예방하기 우리는 이전 글에서 Deadlock이 발생하는 조건에 대해서 알아봤습니다. Mutual Exclusion, Hold-and-Wait, No Preemption, Circular wait. 이 네가지 조건을 모두 만족해야 Deadlock이 발생했었죠. 그렇다면 우리는 이 네 가지 조건 중 하나만 성립하지 않게 한다면 Deadlock이 발생되는 것을 막..

CS/OS 2023.10.21

[운영체제] Deadlock

오늘은 이전 포스팅들에서 간단히 언급되었던 Deadlock에 대해 다뤄보겠습니다. Deadlock 데드락. 우리는 이 개념을 설명하기 위해 Starvation이라는 개념을 먼저 소개했었습니다. Starvation은 프로세스가 critical section을 실행하려고 하는데, 다른 프로세스가 이미 critical section을 실행 중이여서 이를 위해 평소보다 오래 기다리는 상태를 의미합니다. 이에 확장 개념인 Deadlock은 Starvation이 영원히 지속되는 것을 의미합니다. 아래의 그림은 Deadlock을 아주 잘 나타내는 그림입니다. 데드락이 발생하는 경우 Reusable Resource 중 하나인 메모리의 할당량이 200Kb라고 해봅시다. P1, P2는 특정 용량만큼의 메모리를 요구하는 프..

CS/OS 2023.10.21

[운영체제] 6-3. Semaphore의 활용

오늘은 이전 글에서 다룬 semaphore를 어떻게 활용하는 지에 대해서 조금 더 자세히 알아보겠습니다. Semaphore는 기본적인 critical section problem을 해결하는데 사용됩니다. 이전 글에서 언급했지만, 한 번 더 확인해봅시다. 우리에게 익숙한 Producer, Consumer 문제를 예로 들어보겠습니다. semaphore counter = 0; final int BUFFER_SIZE = 10; semaphore empty = BUFFER_SIZE; semaphore mut_ex = 1; void producer(){ while(true){ produce(); semWait(empty); semWait(mutex); append(); semSignal(mut_ex); semSig..

CS/OS 2023.10.12

[운영체제] 6-2. Semaphore

오늘은 critical section problem을 해결할 수 있는 HW support 방법 중 하나인 Semaphore에 대해서 알아봅시다. Semaphore semaphore는 이전 글에서 소개드린 testset의 단점인 busy waiting을 해결하고, bounded waiting 또한 깔끔하게 해결할 수 있는 방식입니다. testset과 마찬가지로, semaphore도 atomic operation을 이용하여 critical section problem을 해결합니다. Semaphore는 하나의 정수와, 큐를 갖는 구조를 의미합니다. 이들의 쓰임은 아래에서 확인합시다. Semaphore에서는 특별한 함수 semWait(s)과 semSignal(s)을 사용합니다. semWait(s)은 semaph..

CS/OS 2023.10.11

[운영체제] 6-1. Testset Instruciton

이번 글에서는 critical section problem을 해결하는 방법 중에서 testset을 이용한 방법을 다뤄보겠습니다. 하드웨어의 도움으로 critical seciton problem을 해결하기 위해 우리는 atomic operation을 활용할 것입니다. 그런데 뭔가 이상하지 않나요?? 우리가 이전 글에서 SW Solution으로 해결하기 위해 critical section을 atomic operation으로 정의해서 진행했더니, critical section을 진행하는 도중에는 interrupt를 받을 수 없으므로 옳지 못하다고 다뤘으니까요. 그래서 여기서는 하드웨어의 지원을 받아서, critical section이 아닌 entry section과 exit section을 atomic ope..

CS/OS 2023.10.10

[운영체제] 5-3. Critical Section Problem-SW Solution

지난 시간에 다뤘던 Critical Section Problem을 해결하는 방법에 대해서 다뤄보고자 합니다. 그 중에서도 SW 적으로 해결할 수 있는 솔루션을 알아봅시다. 요구사항 우선, 우리는 항상 어떠한 문제를 해결하기 위해서는 아래와 같은 질문에 대한 답을 얻고 시작해야합니다. 문제를 해결하기 위해 무엇을 충족해야하는가? 이번에 소개한 Critical Section Problem(이하 csp)를 해결하기 위한 요구사항들은 다음과 같습니다. Mutual Exclusion(상호 배제) : 한 프로세스가 critical section을 수행하는 중이라면, 해당 critical section은 다른 프로세스가 실행할 수 없음을 의미합니다. Progrss(실행 가능) : 만약 어떤 critical secti..

CS/OS 2023.10.07

[운영체제] 5-2. Race Condition

오늘은 앞전 글에서 다룬 개념 중, Race Condition에 대해서 정리해보겠습니다. Race Condition 어떤 공유 자원이 있다고 할 때, 해당 자원을 접근하는 두 개의 프로세스가 실행되는 순서에따라 공유 자원이 다른 상태를 가질 수도 있는 경우. 즉, 각 프로세스의 실행이 독립적이 아닌 종속적인 상황을 의미합니다. 아래에는 그러한 상황을 예시로 보여줍니다. 여러 Producer 프로세스가 존재하여, 공유된 자원(Buffer)에 접근하여 데이터를 집어 넣습니다. 그러면 여러 Consumer 프로세스가 그 데이터를 빼서 쓰는 형태의 예시를 들어보겠습니다. +) 여기서 공유된 자원은 Producer와 Consumer가 프로세스인지 쓰레드인지에 따라 나뉩니다. 프로세스라면 Shared memory겠..

CS/OS 2023.10.03

[운영체제] 5-1. 프로세스 동기화

오늘은 프로세스 동기화에 대해서 다뤄봅니다. 5장에서 다루는 내용들은 운영체제 분야에서 다소 중요한 개념이므로, 꼭 그리고 자세하고 정확하게 짚고 넘어갑시다. 동시성 제어(Concurrency Control) 프로세스 동기화에 대한 설명을 하기 전, 동시성 제어에 대해 짚고 넘어가봅시다. 단일 프로세서를 기준으로 사실 컴퓨터는 하나의 일만 처리하므로 동시라는 말이 어울리지 않을 수 있습니다. 하지만, 매우 빠른 속도로 여러가지 일을 동시에 처리하는 컴퓨터는 마치 사람이 보기에는 동시에 처리되는 것처럼 보일 수 있죠. 동시성을 제어한다는 것은, 프로세스(또는 쓰레드)가 매우 빠른 속도로 변화함에 따라 데이터에 혼란이 있을 수 있는 사태를 방지해야한다는 것을 의미합니다. 따라서, 우리는 이러한 컴퓨터 자원을..

CS/OS 2023.10.02

[운영체제] 4-3. 멀티쓰레드

지난 포스팅에서 다룬 쓰레드 개념에 이어서 멀티쓰레드에 대해서 다뤄보겠습니다. 멀티쓰레드 멀티쓰레드는 말 그대로 쓰레드가 여러개 존재하는 것을 의미합니다. 의미는 굉장히 간단하니 넘어가기로 하고, 전에 다룬 멀티 프로스와 혼동될 수 있는 개념이므로, 한번 짚고 넘어가봅시다. 각 instruction은 점(.)을 의미했고, 그러한 점들이 모인 instruction set이 곧 thread라고 설명한 바 있습니다. 그러한 쓰레드들을 기준으로 용어들을 정리한 그림입니다. 즉! 여러 개의 쓰레드가 존재하는 것이 멀티쓰레드가 아니라 하나의 프로세스 내에서 여러 개의 쓰레드가 존재해야 멀티쓰레드인 것입니다. 멀티쓰레드! 왜 쓰는거죠?? 그렇다면 우리는 멀티쓰레드를 왜 사용할까요?? 제가 이 개념을 처음 배우고 느낀..

CS/OS 2023.10.02