CS
-
[OS] Lock 구현의 기본 원리CS/OS 2025. 11. 28. 09:34
Lock은 어떻게 만들어지는가? 지난 포스팅에서 다뤘듯이 멀티스레드 프로그램을 작성할 때 가장 먼저 부딪히는 문제가 바로 동시성(Concurrency)이다. 여러 스레드가 공유 데이터를 동시에 수정하면 예상치 못한 결과가 발생한다. OS는 이런 문제를 해결하기 위해 다양한 동기화(synchronization) 기법을 제공하는데, 그 핵심이 바로 Lock이다. 이 글에서는왜 Lock이 필요한지하드웨어 관점에서 Lock은 어떻게 구현되는지Spin lock의 한계OS가 개입하는 고급 Lock들까지 정리한다. 왜 Lock이 필요한가?동시에 실행되는 스레드는 순서를 보장할 수 없다.예를 들어 int x = 0;// Thread1void foo() { x++;}// Thread2void bar() { x--;}..
-
[OS] Thread의 구조부터 Race Condition까지: 동시성 정리CS/OS 2025. 11. 26. 15:58
현대 애플리케이션은 여러 작업을 동시에 수행한다. 웹 서버는 동시에 수십만 요청을 처리하고, 모바일 앱은 UI 스레드와 네트워크 스레드를 분리해 부드러운 경험을 제공한다. 이처럼 동시성(Concurrency)을 가능하게 하는 핵심 개념이 바로 Thread다.이번 글에서는 Thread의 구조, 장점, 그리고 왜 동시성이 어렵게 느껴지는지 OS 관점에서 정리해보았다. Thread란 무엇인가?초기 운영체제에서 프로세스는 하나의 실행 흐름(PC)만 가진 단일 구조였다.하지만 현대 OS에서는 프로세스가 여러 스레드를 포함하는 실행 단위가 되었다.스레드가 갖는 요소Program Counter(PC): 다음 실행할 명령어 위치Registers: 계산 작업에 필요한 레지스터 집합Stack: 함수 호출 스택(스레드별 ..
-
[OS] 운영체제 메모리 관리: Free-Space ManagementCS/OS 2025. 11. 17. 00:36
malloc()과 free()는 단순한 함수가 아니다. 그 뒤에는 복잡한 공간 관리 전략이 숨어 있다. Free-Space Management란 무엇인가운영체제(OS)는 CPU, 메모리, 저장장치 등 여러 자원을 효율적으로 관리한다. 그중에서도 메모리 관리(memory management) 는 프로그램 실행의 핵심 요소이다. Free-Space Management란, 프로세스가 요청한 동적 메모리를 어떻게 배분하고, 해제된 공간을 다시 재활용할 것인지를 결정하는 기술이다. 즉,malloc()으로 요청한 메모리를 어디에 줄지, free()로 반환된 공간을 어떻게 관리할지를 다루는 것이 바로 이 장의 핵심이다. 정적 할당과 동적 할당 정적할당동적할당시점컴파일 타임실행 타임크기고정가변예시char name[..
-
[Software Engineering] Behavioral Modeling: 시스템의 내부 동작과 객체 협력 이해하기CS/Software Engineering 2025. 10. 27. 18:20
오늘은 Behavioral Modeling, 즉 시스템 내부의 동작과 객체 간 협력 관계를 모델링하는 방법을 살펴본다. 이 모델은 단순히 "무엇을 하는가"가 아니라, 시스템 내부의 객체들이 어떻게 협력하고 변화하는가를 보여주는 데 초점을 맞춘다. IntroductionBehavioral Model은 시스템 내부의 동작을 설명한다. 즉, 외부에서 보이는 기능이 아니라 내부 객체들이 서로 어떻게 협력하고 상태가 변하는지를 보여주는 모델이다.주요 유형Behavioral Model은 크게 두 가지로 나눌 수 있다. 첫째, Interaction Diagram은 Use Case로 식별된 프로세스의 내부 논리를 표현하며, 객체 간 메시지 교환을 보여준다. 둘째, State Machine은 시간의 흐름에 따라 객..
-
[Software Engineering] Structural Modeling: Class Diagram & Object DiagramCS/Software Engineering 2025. 10. 24. 23:34
Functional Modeling vs Structural Modeling 비교소프트웨어 설계는 보통 두 가지 관점에서 시스템을 이해한다.하나는 무엇을 하는가(Functional), 다른 하나는 무엇으로 구성되는가(Structural) 이다.초점(Focus)Functional Modeling- System의 동작(behavior)Structural Modeling- System의 구조(structure)핵심 질문“무엇을 해야 하는가?”“무엇으로 이루어져 있는가?”표현 대상기능(Functions), 프로세스(Process), 흐름(Flow)객체(Object), 클래스(Class), 관계(Relationship)대표 다이어그램Data Flow Diagram, Activity Diagram, State Di..
-
[OS] Page Replacement: FIFO, LRU, Clock, 그리고 ThrashingCS/OS 2025. 10. 24. 13:59
운영체제의 메모리 관리에서 가장 중요한 문제 중 하나는 '어떤 페이지를 내보낼 것인가?'이다. 메모리(RAM)는 한정되어 있고, 동시에 여러 프로세스가 실행되면 모든 페이지를 올려둘 수 없기 때문이다.이때 운영체제는 페이지 교체 정책(Page Replacement Policy) 을 이용해 희생(victim) 페이지를 선택한다. Page Replacement 개념메인 메모리는 결국 가상 메모리의 캐시(Cache) 라고 볼 수 있다. 디스크(Backing Store)에서 필요한 페이지를 가져오고, 공간이 부족하면 덜 쓰이는 페이지를 내보낸다. 이 과정의 목표는 페이지 폴트(Page Fault)를 최소화하는 것이다. 즉, 평균 메모리 접근 시간(AMAT) 을 줄이는 것이다. 평균 메모리 접근 시간(AMA..
-
[OS] Swap Space와 Page Fault: 메모리 부족을 해결하는 운영체제의 방식CS/OS 2025. 10. 17. 19:14
현실: 모든 프로세스를 다 메모리에 담을 수 없다 지금까지 우리는 "프로세스의 전체 주소 공간이 메모리에 올라가 있다"고 가정해왔다. 하지만 현실은 다르다. 수많은 프로그램이 동시에 실행되고, 각 프로그램은 수백MB~GB를 요구한다. 물리메모리(RAM)은 한정돼 있고, 동시에 수많은 프로세스가 실행되고 있다. 이때 운영체제는 어떻게 모든 프로세스가 문제없이 돌아가도록 할까? 해결책은 물리 메모리의 다른 레벨 계층을 사용하는 것이다. 즉, 여기선 Disk 영역을 사용하는 것이다.Main memory: 빠르지만 작다.Disk: 느리지만 크다. 이렇게까지해서 큰 가상 메모리를 지원하는 이유가 뭘까?Convenience for programmers:개발자는 메모리 사이즈를 걱정하지 않고, 단지 할당하면 됨Mu..
-
[OS] 페이지 테이블의 공간 효율화 단계: Multi-level과 Inverted Page TableCS/OS 2025. 10. 17. 13:22
지난 포스팅에서 TLB의 도입으로 메모리에 2번 접근해서 시간이 증가하는 Page table의 문제는 해결해보았다. 오늘은 기존 array-based Page table의 남은 한 가지 문제점인 "사이즈가 너무 크다."라는 문제를 해결해 보려고 한다. Page table의 문제공간의 오버헤드가 발생한다. 위를 보면 32bit 주소 공간에서 4KB 페이지를 이용할 때, 2³² / 2¹² = 2²⁰, 즉 2²⁰의 페이지가 나온다. 페이지마다 4바이트짜리 엔트리(PTE)가 필요하니까 4MB짜리 테이블이 프로세스 하나당 생긴다. 문제의 핵심 문제는 간단하다.공간 낭비다. Linear Page Table(선형 페이지 테이블)은 "가상 주소의 모든 페이지에 대해 하나씩 엔트리(PTE)를 갖는 단순한 구조"이다..