프로세스 7

[OS/운영체제] 프로세스 동기화 (Process Synchronization) - (1)

Producer-Consumer Problem 다음 두 코드를 보자. Producer 코드는 buffer 한 칸에 문자를 쓰고 버퍼의 다음 칸으로 이동하고 counter를 증가시킨다. Consumer 코드는 counter 값이 0이 될 때까지 buffer 한 칸의 문자를 읽고, counter 값을 감소시킨 후 버퍼의 다음 칸으로 이동한다. 이 두 코드는 각자 실행할 경우 잘 동작하지만, 동시에 실행시켰을 때에는 잘 작동하지 않을 수 있다. 각 코드가 공유하는 counter 변수를 조작하는 과정에서 문제가 발생하는데, counter를 조작하는 구문을 다음과 같이 풀어 쓸 수 있다. (이는 low-level에서 해당 구문이 동작하는 순서와 같음) 동시에 실행되는 counter++ 구문과 counter-- 구..

운영체제 2020.11.10

[OS/운영체제] CPU 스케줄링 (CPU Scheduling) - (3)

Priority Scheduling 각 프로세스에 우선도 값을 부여하여, 우선도 값이 높은 프로세스를 CPU에 우선 할당하는 알고리즘이다. (즉, SJF도 Burst Time이 짧은 프로세스가 높은 우선도를 갖는 Priority Scheduling의 한 경우로 볼 수 있다.) 동일한 우선도에 대해서는 FCFS 알고리즘을 적용한다. 우선도는 정의하기 나름이다. 1이라는 우선도가 3이라는 우선도에 비해 낮을 수도 있고, 높을 수도 있다. (참고한 교재 『Operating System Concepts』 에서는 낮은 숫자를 높은 우선도로 두었다.) 우선도는 내부적 또는 외부적으로 정의될 수 있다. 내부적으로 정의된 우선도는 프로세스의 우선도를 계산하기 위해 측정 가능한 양을 사용한다. 시간 제한이나, 메모리 요..

운영체제 2020.11.09

[OS/운영체제] CPU 스케줄링 (CPU Scheduling) - (2)

스케줄링 알고리즘 CPU 스케줄링 알고리즘은 준비 큐에 있는 프로세스들에 대해 어떤 프로세스를 CPU에 할당할지 결정한다. 각 알고리즘들을 살펴보자. FCFS (First-Come, First-Served) 가장 단순한 알고리즘으로, CPU의 사용을 먼저 요청한 프로세스가 먼저 할당되도록 동작하는 비선점 알고리즘이다. FIFO(First-In, First-Out) 자료구조인 큐(Queue)를 통하여 쉽게 구현할 수 있다는 장점을 갖는다. 하지만, 다음과 같은 상황에서 FCFS의 단점이 드러난다. 위의 예시에서 Burst Time은 프로세스가 CPU를 사용하는 시간이라 생각하면 된다. 이 상황에서 FCFS를 적용한다면, CPU는 P1, P2, P3 순서로 CPU를 할당하게 된다. 하지만 P1의 Burst ..

운영체제 2020.11.09

[OS/운영체제] CPU 스케줄링 (CPU Scheduling) - (1)

CPU 스케줄링 (CPU Scheduling) 단일 프로세서 시스템에서는, 한 번에 단 하나의 프로세스만 실행될 수 있다. 다른 모든 프로세스들은 CPU가 사용 가능해지고 자신이 다시 스케줄링될 때까지 반드시 기다려야만 하는 것이다. 멀티프로그래밍 시스템에서는 CPU 사용을 최대화하기 항상 몇 개의 프로세스들이 돌아가고 있다. 하지만 프로세스는 일반적으로 입출력 요청 등이 들어오면 그 요청이 완료될 때까지 대기해야 한다. 만약 컴퓨터 시스템이 CPU를 단순히 idle상태로 존재하도록 둔다면, 요청이 끝나길 기다리는 동안 아무것도 하지 않는 것이다. 이 때의 대기 시간은 그저 낭비될 뿐이다. 따라서 멀티프로그래밍 시스템은 이 필연적인 대기 시간을 효율적으로 사용하려 한다. 실행 중인 프로세스가 대기해야 할..

운영체제 2020.11.09

[OS/운영체제] 프로세스 (Process) - (3)

프로세스의 생성 한 프로세스는 실행되는 도중 프로세스 생성 시스템 콜을 통해 새로운 프로세스들을 생성할 수 있다. 다른 프로세스를 생성하는 프로세스를 부모 프로세스(Parent Process)라 하고, 다른 프로세스에 의해 생성된 프로세스를 자식 프로세스(Child Process)라 한다. 프로세스의 부모-자식 관계들은 트리의 형태로 나타나게 된다. 대부분의 운영체제에서는 프로세스들을 구별하기 위해 각 프로세스들에게 유일성을 가진 정수 PID(Process Identifier)를 부여한다. 일반적으로, 프로세스는 CPU time, 메모리, 파일, 입출력 장치 등의 자원이 필요하다. 따라서 어떤 프로세스가 다른 프로세스를 하나 생성하면, 생성된 프로세스는 운영체제로부터 직접 자원을 제공받거나 부모 프로세스..

운영체제 2020.11.04

[OS/운영체제] 프로세스(Process) - (2)

PCB (Process Control Block) 각 프로세스는 운영체제에서 PCB의 형태로 표현된다. (Task Control Block이라고도 한다) PCB는 다음 그림과 같이 프로세스와 관련된 다양한 정보들을 담고 있다. - Process State : New, Ready, Running, Waiting 등의 상태를 담는다. - Program Counter : 이 프로세스에서 다음으로 실행될 Instruction의 주소를 담는다. - CPU Register : Program Counter와 더불어 프로세스가 진행된 상태를 저장해 interrupt가 발생한 이후에도 프로세스가 잘 동작하도록 한다. - Memory-management Information : 페이지 테이블, 세그먼트 테이블 등의 메모리..

운영체제 2020.11.04

[OS/운영체제] 프로세스(Process) - (1)

프로세스(Process)란? 일반적으로 실행 중인 프로그램을 지칭한다. 그렇다면 왜 프로세스라는, 실행 중인 프로그램에 대한 개념이 별도로 필요할까? 우리는 대개 컴퓨터를 사용할 때 단 하나의 프로그램만 사용하지 않는다. 크롬과 같은 웹 브라우저, 음악을 재생하는 프로그램, 메신저 프로그램 등 여러 개의 프로그램을 동시에 켜놓고 사용하기 마련이다. 하지만 실행 중인 프로그램들 중 우리가 실제로 조작하고 사용하는 프로그램은 한 순간에 단 하나뿐이다. 따라서 OS는 프로그램 고유의 내부 기능이 잘 동작하도록, 실제로 사용하는 프로그램에게 메모리 관리와 같은 지원을 해 주어야 한다. 메모리에서의 프로세스 (Process Memory Layout) 각 프로세스마다 다음과 같은 메모리 영역을 가진다. - 스택 영..

운영체제 2020.11.04