전공공부/운영체제 (Operating System) 22

[운영체제] Process Synchronization (3) - Mutex Lock, Semaphore

오늘은 프로세스 동기화의 마지막 남은 부분들에 대해서 알아보겠습니다. 구체적으로는 Mutex Lock과 Semaphore에 대해 중점적으로 알아보고자 합니다. 1. Mutex Locks 바로 전의 글에서 하드웨어를 통한 동기화 기법인 test_and_set이나 compare_and_swap의 경우에도 문제점이 있다는 점에 대해서 공부했었습니다. 그래서 운영체제의 설계자들은 이러한 문제를 해결하기 위해 다시 소프트웨어 툴을 개발합니다. 그리고 이 중에 가장 간단한 도구가 바로 Mutex Lock입니다. 아마 리눅스에서 쓰레드를 공부해 보았다면 한번쯤은 사용해 보았을 것이라 생각됩니다. Mutex는 Mutual Exclusion을 뜻하고, 모든 프로세스는 Critical section에 들어가기 위해 loc..

[운영체제] Process Synchronization (2) - test_and_set () & compare_and_swap ()

바로 앞의 글에서 확인할 수 있듯이 Peterson's Solution과 같이 코드적으로 완벽해보이는 소프트웨어적인 알고리즘들도 결국 컴파일러의 동작 순서 등의 이유와 맞물려 예상치 못하게 잘 못 동작할 수 있다는 것을 알 수 있었습니다. 사실 프로세서가 하나 뿐인 시스템 (single-processor system)에서는 어떤 공유 변수가 변경되는 동안은 interrupt 발생을 허용하지 않는 방법을 사용하여 쉽게 처리할 수 있기는 합니다. CPU 스케쥴링을 멈춤으로써 아예 Race condition 문제를 발생하지 않게 하는 것입니다. 하지만 이것은 multiprocessor system에서는 사용이 불가능하며, 또 실시간 처리가 필요한 시스템에서는 사용이 불가능합니다. Multiprocessor s..

[운영체제] Process Synchronization (1) - Race Condition, Peterson's Solution

프로세스 동기화 파트에서는 앞에서 잠깐 설명한 적이 있는 Race Condition에 관한 문제를 다루게 됩니다. 프로세스들은 병렬적으로 실행이 될 수 있기 때문에 여러 프로세스가 공유하고 있는 데이터의 무결성에 문제를 야기할 수 있습니다. Race Condition에 대해서 먼저 알아보도록 하겠습니다. 1. Producer-Consumer Problem 가장 쉽게 Race Condition에 대해서 알아볼 수 있는 모델이 바로 생산자-소비자 모델입니다. 위 그림과 같은 모델에서 A와 B는 버퍼를 공유하고 있고, A는 공유하고 있는 버퍼에 데이터를 채워 넣기만 하고, B는 데이터를 가져가기만 합니다. 버퍼가 가득 차있으면 A는 버퍼에 빈 공간이 생길 때까지 대기하여야 하고, 버퍼가 텅 비어있다면, B는 ..

[운영체제] CPU Scheduling (2) - Scheduling Algorithms

지난 글에 이어 이번에도 CPU 스케쥴링에 대해 공부해 보겠습니다. 이번엔 스케쥴링의 기준과 스케쥴링 알고리즘에 대해 알아보는 시간을 갖도록 하겠습니다. 1. 스케쥴링 기준 (Scheduling Criteria) CPU의 스케쥴링 알고리즘들은 서로 다른 특성을 가지고, 서로 다른 포인트에 집중하여 스케쥴링을 진행합니다. 그래서 특정 상황에서 스케쥴링 알고리즘을 선택하기 위해서는 각 알고리즘들의 특성들을 이해하고 있어야 합니다. 스케쥴링 알고리즘을 비교하여 선택하기 위해서는 여러 가지 기준들이 필요하며, 이 기준들에 따라 선택되는 알고리즘이 크게 바뀔 수 있기 때문에, 최선의 알고리즘을 선택하기 위해서는 명확한 기준을 세우는 것이 중요합니다. 여기서는 6가지 기준에 대해 알아보겠습니다. 1. CPU Uti..

[운영체제] CPU Scheduling (1) - What is CPU Scheduling?

CPU 내에서 하나의 core에서는 한 번에 단 하나의 process만 실행이 가능합니다. 그 말인즉슨 하나의 process가 실행되고 있으면, 다른 process는 실행이 되고 싶어도 사용 가능한 core가 생길 때까지 대기를 해야 한다는 뜻입니다. 만약 CPU에 진입한 process의 실행이 모두 완료가 되어야 다음 process가 CPU를 차지할 수 있다고 가정해봅시다. Process는 실행 중에 입출력 요청이 완료되기를 기다릴 때가 있습니다. 이러한 상황에서 CPU는 아무 작업도 실행하지 못하며 시간과 자원을 낭비하는 결과를 초래합니다. 또는 꼭 지금 수행해야 하는 process가 있는데 앞에서 수행 중인 process의 작업이 너무 길어서 한참을 대기해야 하는 경우에도 비효율적인 결과가 만들어집..

[운영체제] Thread (2) - Multithreading Model, Implicit Threading, and Other Issues

지난번 글에 이어서 오늘도 thread에 관하여 공부해보고자 합니다. 오늘은 thread의 종류와 다중 thread의 몇 가지 모델에 대해서 먼저 알아본 뒤, thread에 관한 여러 이슈들을 다뤄볼까 합니다. 1. User thread vs. Kernel thread 지난 글에서는 thread를 그냥 일반적인 의미에서의 thread로 간주하고 공부를 했습니다. 하지만 사실 thread에도 두 가지 종류가 존재합니다. 바로 user thread (사용자 쓰레드)와 kernel thread (커널 쓰레드)입니다. 당연히 사용자 레벨에서 사용되는 thread가 user thread이고, kernel 영역에서 사용되는 thread가 kernel thread입니다. User thread는 kernel과 관계없이..

[운영체제] Thread (1) - Definition, Implementation, and Multicore

지금까지 살펴보았던 process는 모두 process 하나가 하나의 thread를 가지고 있다고 가정하고 공부를 하였습니다. 즉 하나의 process는 한 번에 하나의 작업만 수행한다고 가정을 했었다는 것이죠. 하지만 실제로는 하나의 process는 여러 개의 thread를 가질 수 있으며 이 thread들을 통해 process 하나로도 병렬적인 작업 수행이 가능합니다. 1. Thread란? 우선 thread의 정의를 알아보자면 process내에서 실행되는 흐름의 단위를 말합니다. 즉, 여러 개의 thread가 있다면 여러개의 작업의 흐름을 가질 수 있는 것이죠. 이렇게 말하면 너무 추상적인데, 예를 들어 설명하자면, 지금까지 배운 process의 개념에서는 하나의 thread만 가지고 있다고 가정했기..

[운영체제] Processes (3) - Interprocess Communication (IPC)

Process 파트의 마지막 내용으로 Interprocess Communication, 즉 process 간 통신에 대해 알아보겠습니다. Process들은 운영체제 내에서 병렬적으로 수행되기 때문에 서로 독립적이면서도 상호 협력적인 관계에 있습니다. 이러한 Process들 간의 협력을 통해 우리는 몇 가지 이득을 취할 수 있습니다. 1. 정보 공유 (Information Sharing): 여러 응용 프로그램들이 동일한 정보에 흥미를 가질 수 있기 때문에 병행적으로 접근이 가능한 것이 좋다. 2. 계산 가속화 (Computation Speedup): 작업을 빨리 끝마치기 위해서는 작업을 서브 작업들로 분할하여 여러 process들에서 병렬적으로 수행하는 것이 좋다. 3. 모듈성 (Modularity): 시..

[운영체제] Processes (2) - Process Creation & Termination

지난 글에 이어서 오늘도 Process에 대해 알아보려고 합니다. 오늘은 Process가 어떻게 생겨나는지부터 차근차근 하나씩 공부해나가고자 합니다. 원래는 process 스케쥴링에 관한 내용이 앞에 조금 나오지만 이 부분은 나중에 훨씬 자세하게 다룰 기회가 있으니 그때로 미뤄놓도록 하겠습니다. 1. Process Creation 모든 process는 자신만의 정수 값으로 표현되는 number를 가집니다. 이를 Process Identifier, 줄여서 PID라고 부릅니다. 참고로 최초에 존재하는 process는 swapper라고 불리며 pid는 0입니다. 하지만 swapper는 사용자 모드가 아닌 kernel의 일부로 페이징을 담당하기 때문에 보통 root parent process로 취급하지 않고, ..

[운영체제] Processes (1) - Process State, PCB

이번에 알아볼 내용은 바로 Process에 관한 내용입니다. 사실상 운영체제에 대한 공부가 본격적으로 시작되는 시점입니다. 1. Process란? Process는 "실행되고 있는 프로그램(A program in execution)"이며, 경우에 따라서는 job, task 등으로 바꿔 부르기도 합니다. Process는 프로그램의 실행에 대한 하나의 작업 단위로 볼 수 있고, 하나의 프로그램을 여러 번 실행시키면 여러 개의 process가 실행되게 됩니다. Process는 program code, execution state (thread info.), process state, process ID 등의 정보를 담고 있습니다. 각각의 Process는 자신의 virtual memory를 가지며, 이 virtu..