Operating Systems: Three Easy Pieces - Event-based Concurrency

지금까지 동시성 프로그램을 스레드 기반 동시성만으로 구축하는 것이 유일한 방법인 것처럼 작성해왔습니다. 이는 당연히 전혀 사실과는 거리가 멀고, 여러 다른 스타일의 동시 프로그래밍이 있습니다. 이 스타일은 이벤트 기반 동시성으로 알려져 있으며 node.js와 같은 서버 측 프레임워크를 포함한 현대 시스템에서 인기를 얻고 있습니다. 그 뿌리는 아래에서 논의할 C/UNIX 시스템에 있습니다. ...

5월 8, 2026 · 13 분 · DSeung001

Operating Systems: Three Easy Pieces - Concurrency Bugs

많은 사람들이 오랜 시간 동안 동시성 버그에 대해 시간과 노력을 들여 연구해 왔습니다. 대부분 교착 상태에 초점이 맞춰졌고, 이는 이전 장에서도 언급했듯 이번 장에서 더 깊이 다룰 것입니다. 이번에는 하드웨어와 밀접한 설명이 많아 c로 진행합니다. ...

5월 6, 2026 · 14 분 · DSeung001

Operating Systems: Three Easy Pieces - Semaphores

동시성 문제를 해결하기 위해 cv, lock을 추가했죠. 이제는 다익스트리아가 도입한 세마포어에 대해 알아봅시다. 세마포어의 핵심은 다음과 같습니다 원자적 정수 변수: 세마포어 값은 중단 없이 한 번에 변경되어야 합니다. 카운팅 기능: 0 또는 1만 갖는 바이너리 세마포어(뮤텍스와 유사)와 0 이상의 정수 값을 가지는 카운팅 세마포어가 있습니다. 동기화: 자원이 없으면 프로세스는 대기(block)하고, 자원이 생기면 깹니다 세마포은 동시성을 관리하는 논리적 제어장치 또는 충돌을 방지하는 메커니즘입니다. ...

5월 5, 2026 · 14 분 · DSeung001

Operating Systems: Three Easy Pieces - Condition Variables

아쉽게도 lock만으로는 동시 프로그램을 구축하는 데 제약이 있습니다. 특히 스레드가 실행을 계속하기 전에 조건이 참인지 확인을 하고 싶어하는 경우가 많은 데, 이를 해결할 때 부족한점이 보이죠. 예를 들어 부모 스레드는 자식 스레드가 완료되었는 지 여부를 확인하고 싶을 수 있죠.(이를 join으로 부르기도 합니다.) ...

5월 4, 2026 · 14 분 · DSeung001

Operating Systems: Three Easy Pieces - Lock-based Concurrent Data Structures

Lock을 다음 주제로 넘어가기 전에 일반 데이터 구조에 Lock을 얹어 쓰는 방법을 다룹니다. 모든 상황에 두루 통하는 방법을 찾기 어렵기 때문에 시나리오별로 나누어 살펴봅니다. 이번 챕터는 자료 구조라서 학습을 위해 파이썬(표준 라이브러리 threading)으로 같은 패턴을 옮겨 적습니다. ...

5월 2, 2026 · 10 분 · DSeung001

Operating Systems: Three Easy Pieces - Locks

동시성 프로그래밍에서 일련의 명령을 원자적으로 실행하고 싶지만, 단일 또는 멀티 프로세스에서 멀티 스레드 환경을 도입시 프로세서에서의 인터럽트가 발생하기 때문에 그렇게 할 수 없죠, 그래서 이장에서 Lock을 도입하여 문제를 해결합니다. 해당 글에서도 c가 아닌 python으로 코드를 적습니다.(컨샙이나 이해부분을 위해 OSTEP를 보는 것이죠) 하지만 포인터 개념이 필요한 경우 c 코드를 참고합니다. ...

4월 30, 2026 · 16 분 · DSeung001

Operating Systems: Three Easy Pieces - Thread API

교재에서는 c의 POSIX을 기반으로 진행되고 있고 Python을 공부 중이므로 Python의 threading로 해당 글을 진행합니다. threading 모듈은 OS의 저수준 스레딩 기능 위에 구축된 객체 지향 API로 Unix 계얼에서는 POSIX Thread(pthreads) 라이브러리를 기반으로 동작합니다. Thread Creation 파이썬에서는 threading.Thread 객체를 만들어 스레드를 생성합니다. 핵심은 “어떤 함수를 어떤 인자로 실행할지"를 스레드 객체에 넘기고, start()로 실행을 시작하는 흐름입니다. ...

4월 29, 2026 · 13 분 · DSeung001

Operating Systems: Three Easy Pieces - Concurrency: An Introduction

Process vs Thread 멀티 스레드는 하나의 Program Counter(PC)만 갖는 단일 스레드와 달리 각 스레드가 자신만의 Program Counter(PC)와 스택(Stack) 을 가집니다. 이로 인해 멀티 프로세스와 달리 다음 차이점들이 발생합니다. ※ Program Counter(PC): 다음에 실행할 명령어의 주소를 저장하는 레지스터 하나의 프로세스에 두 개의 스레드(T1, T2)가 있다고 가정해보면, T1에서 T2로 넘어갈 때 스레드 간 컨텍스트 스위치가 일어납니다. 이 과정은 프로세스 간 컨텍스트 스위치와 비슷하게 현재 실행 상태를 저장하고 다음 실행 상태를 복원한다는 점에서 유사합니다. ...

4월 28, 2026 · 14 분 · DSeung001