목록CS (39)
빙응의 공부 블로그

📝서론 지금까지 락의 개념을 학습하면서 하드웨어와 운영체제의 적절한 지원을 통해 제대로된 락을 만드는 법을 알아보았다. 쓰레드가 계속 진행하기 전에 어떤 조건이 참인지 검사해야 하는 경우가 많다.예를 들어 부모 쓰레드가 작업을 시작하기 전에 자식 쓰레드가 작업을 끝냈는지 검사하기를 원할 수 있다.이런 경우 부모 쓰레드가 특정 조건이 참이 될때까지 잠자면서 기다리는 방법을 선택한다. 그렇다면 조건을 기다리는 법은 무엇일까?조건이 참이 될 때까지 회전을 하며 기다리는 것이 간단하지만 CPU 사이클 낭비가 심하다. 📝정의와 루틴들조건이 참이 될 때까지 기다리기 위해 컨디션 변수를 활용할 수 있다.컨디션 변수는 일종의 큐 자료 구조로서, 어떤 실행의 상태가 원하는 것과 다를 때 조건이 참이 되기를 기다리는 ..

📝서론 병행성에 대한 소개 이후 병행 프로그램의 근본적인 문제 몇 개를 살펴보았다. 여러 개의 명령어들을 원자적으로 실행해보고 싶지만 단일 프로세스의 인터럽트로 인해서 그렇게할 수 없다. 이 장에서는 임계 구역에서 상호 배제를 할 수 있는 것 중 하나인락(Lock)에 대해 알아보자 📝락 : 기본 개념예제를 위해 다음과 같은 임계 영역이 있다고 하자. 전형적인 예제인 공유 변수 갱신이다.banlance = balance + 1; 락은 하나의 변수로 사용한다. 이 락 변수는 락의 상태를 나타내며 사용 가능 상태 & 사용 중 상태가 있다.lock_t mutex; // 글로벌 변수로 선언된 락lock(&mutex);balance = balance + 1;unlock(&mutex); 📌 Pthread 락쓰레..

📝서론 지금까지 운영체제가 다루는 기본 개념들의 발전 과정을 살펴보았다. 하나의 물리적 CPU를 다수의 가상 CPU로 확장하여 마치 여러 개의 프로그램이 동시에 실행하는 듯한 착시를 만들었고 개별적인 프로세스가 모두 독립적으로 많은 가상 메모리를 가지는 것처럼 만들었다. 이번 장에서는 프로세스를 위한 새로운 개념인 쓰레드를 소개한다.프로그램에서 한 순간에 하나의 명령어만 실행하는 관점에서 벗어나 멀티 쓰레드 프로그램은 하나 이상의 실행 지점을 가진다. 차이점 1, 쓰레드의 주소 공간 공유와 동일한 값 접근 가능문맥 교환을 통해 실행중인 쓰레드가 교체할 때 쓰레드 제어 블록( thread control block, TCB)쓰레드 간의 문맥 교환은 주소 공간을 공유한다. 즉, 같은 주소 공간을 공유한 상태..

📝서론 페이징은 전에서 설명하듯이 상당한 성능 저하가 올 수 있다. 페이징은 페이지 테이블을 통해 매핑 저장 정보를 가져온다. 이것은 매번 메모리에 접근한다는 것으로 시간적으로나 공간적으로나 모두 손해가 심각한다.우리는 페이징의 주소 변환 속도를 향상 시켜야 한다.📝TLB운영체제의 실행 속도 개선을 위해 우리는 대부분의 경우 하드웨어로부터 도움을 받는다.주소 변환을 빠르게 하기 위해서 변환-색인 버퍼 또한 TLB라고 부르는 메모리 관리부(MMU)를 두기 시작한다. TLB의 기본 알고리즘TLB는 쉽게 말하면 캐시와 비슷하다. TLB에 변환 정보를 저장하여 만약 TLB에 들어있다면 메모리에 접근하지 않고 정보를 얻을 수 있다. 흐름을 살펴보자가상 주소에서 페이지 번호만 뽑아낸다.어느 페이지에 있지?TLB..

📝서론 운영체제는 거의 모든 공간 관리 문제를 해결할 때 두 가지 중 하나를 사용한다.가변 크기의 조각들로 분할하는 것(세그먼테이션)가변 크기로 분할하게 되면 공간 자체의 단편화가 발생메모리 할당이 점점 어려워진다.동일 크기의 조각들로 분할하는 것(페이징)유연성 개선 : 프로세스의 주소 공간 사용방식과는 상관없이 효율적인 주소 공간 개념 지원빈 공간 관리의 단순함운영체제는 모든 비어있는 페이지의 빈 공간 리스트만 유지하면 된다.운영체제는 페이지 테이블을 프로세스마다 유지 📝간단한 예제 및 개요페이징에 대해 명확히 이해하기 위해 간단한 예를 살펴보자아래 그림은 가상 메모리를 작은 단위로 쪼개서 페이지라 부르며 아래와 같이 구성된다. 물리 메모리는 아래 그림과 같이 고정 크기의 슬롯들로 이루어진다.물..

📝서론 : 세그먼트의 단점이번 장에서는 세그먼트에서 발생한 빈 공간인 외부 단편화 관리에 대해 알아볼 것이다. 빈 공간을 어떻게 관리할까?- 가변 크기의 요구를 충족시켜야 할 때, 빈 공간은 어떻게 관리하지?- 단편화를 최소하하기 위해 어떤 전략을 사용하지?- 여러 대안들의 시간과 공간적 오버헤드는 얼마지? 📝시작 전 가정malloc() 과 free() 에서 제공하는 것과 같은 기본 인터페이스를 가정한다.힙의 빈 공간을 관리하기 위해 링크드리스트를 사용한다.물론, 빈 공간을 표현할 수 있는 자료구조면 어떤 것이든 가능하다.클라이언트에게 할당된 메모리는 다른 위치로 재배치될 수 없다고 가정 한다. 📝20.2 저수준 기법들분할(splitting) 및 병합(coalescing)에 대해 알아보자 분할과 ..