CS/OS
-
[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[..
-
[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)를 갖는 단순한 구조"이다..
-
[OS] Paging을 가속시킨 하드웨어 캐시: TLBCS/OS 2025. 10. 14. 13:27
Paging table의 문제점지난번에 포스팅했던 페이지를 보면 문제가 있었다. 가상 주소 → 물리 주소로 변환하는 과정은 생각보다 꽤 비싸다. 일반적으로는 페이지 테이블(Page Table) 을 한 번 거쳐야 하니까, CPU 입장에선 "메모리 한 번 읽으려는데 두 번이나 가야 하는 것"이다. 위 사진을 보면 메모리에서 PTE를 읽을때와, 메모리에서 PA 컨텐츠를 읽을 때 총 2번의 메모리 접근이 일어난다. 그래서 등장한 게 바로 , TLB (Translation Lookaside Buffer)이다. 이름만 보면 뭔가 거창하지만, 쉽게 말하면 주소 변환 캐시(address translation cache)다. TLB: 주소 변환의 캐시TLB는 CPU 안의 MMU(Memory Management Un..
-
[OS] 외부 단편화를 해결한 Paging: 등장 배경과 한계CS/OS 2025. 10. 10. 22:24
왜 메모리 가상화(Virtualization)가 필요할까?우리가 만든 프로그램, 즉 프로세스들은 실행되려면 메모리(RAM)에 올라가야한다. 그런데 실제로는 여러 프로세스가 동시에 돌아가고 있다. 각 프로세스가 다른 프로세스의 메모리 영역을 침범하지 않으면서도, 마치 자신이 메모리 전체를 독점하는 것처럼 동작해야 한다. 이게 바로 메모리 가상화의 핵심 목표이다. Segmentation의 문제점지난번 포스팅 한 것 처럼 초기에는 Segmentation처럼 프로세스마다 가변적인 크기로 메모리를 할당하는 방식도 썼다. 이는 크기가 다른 서랍을 여러 개 사용하는 옷장과 비슷하다. 근데 이 방식의 가장 큰 문제점은 시간이 지날수록 메모리에 작고 쓸모없는 구멍들이 생기는 외부 단편화(External Fragment..