
운영체제 시리즈에 대한 설명
프로세스는 단순히 실행중인 프로그램이다. 프로그램 또한 그 자체만 놓고본다면 0과 1로 이루어진 명령어들의 집합일 뿐이다. 그리고 그 데이터들을 가져와서 프로그램을 유용한 것으로 변환 하는 것은 운영체제이다.
UNIX 시스템에서의 프로세스 생성에 대해 논의한다. UNIX 는 fork()와 exec() 라는 시스템 호출을 사용하여 새 프로세스를 생성하고 wait()를 사용하여 생성된 프로세스를 대기시킨다.
문서Processes에서CPU 가상화를 위한 시분할 방법에 대해 알아보았다. 가상화를 구현하는데는 고려할 사항들이 있다. 첫 번째는 성능이다. 시스템에 과도한 오버헤드(어떤 일을 하기 위한 시간이나 메모리)를 추가하지 않고 가상화를 구현할 수 있을지를 생각해야한다.
운영체제 스케줄링 정책을 알아보자
스케줄링 중 가장 잘 알려진 방법 중 하나인 다중 피드백 대기열 MLFQ:The Multi-Level Feedback Queue에 대해 알아보자
스케줄러의 또 하나의 비교 기준인 Fairness(형평성)을 중점으로 비례 배분 proportional share 스케줄러에 대해 알아보자
메모리 가상화를 위한 주소 공간에 대해 알아보자
UNIX 시스템에서의 메모리 할당 인터페이스에 대해 알아보자
가상 메모리 구현을 위한 address tranlation 에 대해 알아보자
스택과 힙 사이에 큰 빈공간이 있고 이 크기만큼 메모리가 낭비되고 있었다.
메모리 가상화에서 조금 벗어나서, 메모리 관리 시스템의 기본적인 측면에 대해 알아보자
세그멘테이션의 단점을 극복하는 페이징에 대해 알아보자
페이징에 따른 오버헤드를 극복하기 위한 TLB에 대해 알아보자
페이지 테이블이 너무 큰 문제를 해결하는 방법들에 대해 알아보자
swapping 에 대해 알아보자
swapping 의 정책들에 대해 알아보자
스레드에 대해 알아보자
운영체제가 스레드 생성, 제어를 위해 제공하는 인터페이스(POSIX의 방법)에 대해 알아보자
명령들을 원자적으로 실행시키기 위해 Lock 에 대해 알아보자
데이터 구조에서 락을 사용하는 방법에 대해 알아보자
이전의 포스팅에서 Lock의 개념을 알게되었고, Lock을 구축하는 방법을 알아보았다. 하지만 Lock은 동시성 프로그램을 작성하는데 필요한 유일한 기본조건이 아니다.
동시성 문제를 해결하기 위해 lock과 condition vaariable(조건변수)가 필요하다는 것을 알았다. Dijkstra(다익스트라)는 이를 구현할 수 있는 semaphore(세마포어)를 발명했다. 세마포어는 lock과 condition variable 모두로
연구자들은 오랜 기간에 걸쳐 동시성 버그에 대해 연구해왔다. 초기 연구의 대부분은 교착상태(deadlock)에 초점을 맞췄고, 최근 연구는 비-데드락(non-deadlock) 버그에 초점을 맞추었다. 이 버그들의 예시를 살펴보면서 어떻게 해결하는 것이 좋을지 생각해보자
하드디스크 드라이브에 대해 알아보자.