Sleep and Wakeup프로세스를 동기화하여 서로 다른 프로세스가 동시에 임계 구역에 존재하지 못하도록 막는 알고리즘을 '상호 배제' 라고 하였다.상호 배제를 달성하는 간단한 알고리즘들을 정리하였는데, 이 알고리즘들은 모두 busy waiting 알고리즘으로 계속해서 공유 변수를 체크하면서 자신이 임게 구역에 들어갈 수 있는지 직접 확인해야했다. busy waiting 방식은 CPU 시간을 낭비하고, 우선순위 스케줄링 방식에서 우순선위 역전 문제를 일으키기도 한다.그래서 그 대안으로 나온 방법이 Sleep and Wakeup 이다. sleep, wakeup 은 모두 시스템 콜이다.sleep 시스템 콜을 호출하면 다른 프로세스가 wakeup 시스템 콜을 호출할 때까지 호출한 프로세스를 blocked ..
프로세스는 단독으로 자원을 경쟁적으로 사용하면서 실행되기도 하지만 서로 통신하고 협력하면서 실행되기도 한다.프로세스 사이에 통신할 때는 크게 3가지 문제점이 있다. 1. 어떻게 하나의 프로세스에서 다른 프로세스로 정보를 넘길 것인가?2. 어떻게 각 프로세스가 중요한 동작을 하고 있을 때 서로를 방해하지 않도록 보장할 것인가?3. 프로세스와 프로세스의 동작 사이에는 의존성이 존재할 수 있는데, 어떻게 올바르게 실행되도록 순서를 조정할 것인가?(프로세스 A가 생성한 데이터를 프로세스 B가 출력한다면, 프로세스 B는 프로세스 A의 동작이 끝날 때까지 기다려야 한다.) 이 문제를 해결하는 것을 가리켜 '프로세스 동기화' 라고 한다. 우선 첫 번째 문제인 하나의 프로세스에서 다른 프로세스로 정보를 넘기는 것은 단..
프로세스프로세스는 컴퓨터 메모리에 올라와있는, 실행중인 프로그램을 말한다.(실행중이지 않은 프로그램은 하드디스크나 SSD에 파일로서 존재하는 프로그램을 말한다.) 만약 여러 개의 프로그램을 실행해서 여러개의 프로세스가 생성되면 과연 정말로 여러 프로세스가 동시에 실행되고 있는 것일까?여러 개의 프로세스를 실행하는 것을 '멀티 프로그래밍' 이라고 하는데, 아래 이미지와 같이 구현된다. 그림에서 보는 것처럼 CPU가 프로세스를 하나씩 번갈아가면서 실행하는 것이 멀티 프로그래밍이다.하드웨어적으로는 (a) 와 같이 하나의 프로그램 카운터가 각 프로세스를 넘나들면서 실행하며,개념적으로는 4개의 독립된 프로그램 카운터가 존재하는 것처럼 동작한다.그래서 시간에 따른 프로세스별 실행 흐름은 (c)와 같은 모습으로 나..
시스템 콜시스템 콜은 컴퓨터 프로그램이 운영체제가 제공하는 서비스를 제공 받을 때 사용하는 인터페이스이다. 대부분의 CPU는 커널 모드(kernel mode)와 사용자 모드(user mode)를 갖고 있다.CPU 내부에는 PSW (Program Status Word) 라고 하는 레지스터가 있고, 이 레지스터의 여러가지 비트들 중 하나가 CPU의 모드를 결정한다. CPU가 커널 모드로 동작하게 되면, CPU에 정의된 instruction set 에 있는 모든 명령어를 실행할 수 있게 되고, 하드웨어의 모든 기능을 사용할 수 있게 된다.그리고 운영체제는 커널모드에서 동작한다. 따라서 운영체제는 모든 하드웨어 기능을 사용할 수 있다. 반면 우리가 흔히 사용하는 프로그램들은 사용자 모드에서 동작한다.사용자 모드..