CS

    [전공생이 설명하는 OS] 메모리 관리 - (2) Virtual Memory

    [전공생이 설명하는 OS] 메모리 관리 - (2) Virtual Memory

    1. 가상메모리란? 각 프로세스에게 큰 전용 메모리를 제공하는 기술. 2. 부분적재 에러코드, 자주 접근되지 않는 코드들까지 한번에 적재할 필요가 있나? Locality, Knuth's estimation : 10%의 코드가 90% 실행시간을 갖는다. 가상메모리도 일종의 캐시. 디스크와 메모리 사이의 캐시 (fetch policy) 그러면 필요한 부분을 언제 올릴건데? (resident set policy) 메모리에 올라와 있는 각 프로세스의 조각들을 어떻게 효율적으로 관리할 것인가? (replacement policy) 메모리가 부족해서 다른 조각들을 쫓아내야할때 어떤 조각들을 쫓아낼것인가? 매핑테이블을 어떻게 관리할 것인가? 보통 paging 과 segmentation 기법을 사용 - 프로세스를 조각..

    [전공생이 설명하는 OS] 메모리 관리 - (1) Partition/Page/Segment

    [전공생이 설명하는 OS] 메모리 관리 - (1) Partition/Page/Segment

    1. Memory Management 란? 메모리는 (1) OS(resident monitor, kernel) (2) user 두 부분으로 나뉜다. Uni-programming 환경에서는 user part 에 1개의 프로그램만 적재되고, multi-programming 환경에서는 다수의 프로그램이 적재될 수 있다. Memory management 라는 말은 OS 가 user 가 사용하는 메모리를, 프로세스의 요청에 맞게 분할 및 분배하는 것을 포함한다. 메모리를 할당하는 방식은 프로세스 실행 시점에 따라 크게 두 가지로 분류할 수 있다. static allocation : 프로그램 실행 이전에 미리 메모리를 할당하는 방식 (예, global 변수나 상수 등) dynamic allocation : runt..

    [전공생이 설명하는 OS] 동기화 - (6) 식사하는 철학자 문제 (코드 포함)

    [전공생이 설명하는 OS] 동기화 - (6) 식사하는 철학자 문제 (코드 포함)

    Dining Philosopher Problem 식사하는 철학자 문제는 다익스트라 선생님께서 논문을 통해 제시하신 대표적인 데드락 상황이다. 위와 같이 원형의 탁자에 5개의 포크가 놓여있다. 스파게티를 먹기 위해서는 2개의 포크를 사용해야한다는 규칙이 있다. 이 상황에서 5명의 철학자가 포크를 한 개씩 잡고 데드락에 빠지면 모두가 굶어 죽는 starvation 이 발생한다..! 철학자가 다 굶어죽는 c++ 코드는 다음과 같다. 더보기 #include #include #include #include #define NUM 5 sem_t forks[NUM]; // forks void *philosopher(void*); int main(){ pthread_t threads[NUM]; for(int i=0; i

    [전공생이 설명하는 OS] 동기화 - (5) Deadlock

    [전공생이 설명하는 OS] 동기화 - (5) Deadlock

    Review 쓰레드(Thread)와 동기화 문제 동기화 - (1) 용어 및 개념정리 동기화 - (2) 상호배제 전략(Mutex) 동기화 - (3) 조건동기화 (pthread 예시) 동기화 - (4) 생산자 소비자 문제 지금까지 race condition 이 발생하는 이유와, 이를 해결하기 위해 다양한 동기화 기법이 필요하다는 점을 설명했다. 특히 이전 포스팅에서는 할당 가능한 자원의 개수를 (0~MAX)개로 제한하는 web server request buffer 를 살펴보면서 `생산자-소비자 문제`(bounded buffer problem) 를 해결해보았다. 이번에는 동기화로 인해 발생할 수 있는 심각한 문제인 교착상태(deadlock)을 알아보도록 한다. 1. Deadlock 이란? 다수의 스레드 또는..

    [전공생이 설명하는 OS] 동기화 - (4) 생산자 소비자 문제

    Reviews 쓰레드(Thread)와 동기화 문제 동기화 - (1) 용어 및 개념정리 동기화 - (2) 상호배제 전략(Mutex) 동기화 - (3) 조건동기화 (pthread 예시) 여태까지, 멀티프로세스 또는 멀티쓰레드 환경에서 공유자원을 사용하다보면 race condition 이 발생할 수 있고 이를 해결하기 위해서는 동기화가 필요함을 설명했다. 동기화에는 상호배제(Mutual Exclusion) 전략과 조건 동기화(Condition Synchronization) 전략이 있다. 상호배제는 공유자원을 한번에 하나씩 사용하는데 집중한다. 비슷하지만 조건동기화는 다수의 실행흐름을 제어하는데 더 유리하다. Critical Section에 대기하는 프로세스(또는 쓰레드)를 Ordering 하는 전략이다. 지난..

    [전공생이 설명하는 OS] 동기화 - (3) 조건동기화 (pthread 예제 코드 포함)

    [전공생이 설명하는 OS] 동기화 - (3) 조건동기화 (pthread 예제 코드 포함)

    Review 쓰레드(Thread)와 동기화 문제 동기화 - (1) 용어 및 개념정리 동기화 - (2) 상호배제 전략(Mutex) 이전 포스팅에서 지속적으로 언급했듯이, 멀티프로세스 또는 멀티쓰레드 환경에서 공유자원을 사용하다보면 race condition 이 발생할 수 있고 이를 해결하기 위해서는 동기화가 필요하다. 동기화에는 상호배제(Mutual Exclusion) 전략과 조건 동기화(Condition Synchronization) 전략이 있다. 지난 포스팅까지는 상호배제의 관점에서 동기화를 알아보았다. 상호배제는 공유자원은 한번에 하나씩 사용하는데 집중한다. 비슷하지만 조건동기화는 Critical Section에 대기하는 프로세스(또는 쓰레드)를 Ordering 하는 전략이다. 조건 동기화 조건동기화..

    [전공생이 설명하는 OS] 동기화 - (2) 상호배제 전략 (Mutex)

    [전공생이 설명하는 OS] 동기화 - (2) 상호배제 전략 (Mutex)

    지난 포스팅(동기화 - (1) 용어 및 개념정리)에서 정리했듯이, 동기화는 Critical Section 에 대한 접근 제어를 적절하게 잘 한다는 것이고, 구체적으로 MutualExclusion / Progress / BoundedWaiting 3가지의 requirement를 만족시켜야한다고 언급했다. 이런 특성을 만족시키는 동기화 전략은 (1)상호배제, (2)조건부 동기화 전략이 있는데, 이번 포스팅에서는 상호배제의 측면에서 동기화 기법을 살펴보도록 한다. 상호배제 차원의 동기화 전략은 SW의 방식과 HW의 방식으로 나눌 수 있다. 1. SW approach 크게 1) Peterson의 알고리즘, 2) Interrupt 차단방식 두가지를 예로 들 수 있다. 결론부터 이야기하자면, SW 방식의 동기화 전..

    [전공생이 설명하는 OS] 동기화 - (1) 용어 및 개념정리

    동기화 문제가 왜 발생하는지에 대해서는 [전공생이 설명하는 OS] 쓰레드(Thread)와 동기화 문제 의 마지막 단락을 참고해주세요. [동기화 관련 용어] (1) Race Condition : 멀티쓰레드 또는 멀티 프로세스 환경에서 공유자원에 동시에 접근할 때, 의도치 않은 결과를 낳는 것을 race condition이라고 하고 다음과 같은 특성을 갖는다. 근본적으로는 [cpu 스케줄링 + 캐시(레지스터 포함) + non-atomic instruction] 때문에 발생하며, 이를 방지하기 위해서는 공유자원에 대한 동기화가 필요하다. Non-Deterministic : 의도하지 않은 결과를 내는데, 결과를 예측할 수 없다. Reproducible : 재현 가능하다. (2) Critical Section :..