본문 바로가기

컴퓨터 공학/운영체제

(6)
[Nachos] 4. Priority Scheduler 구현 [Nachos] 4. Priority Scheduler 구현 1. 문제제기 a) 목표 현재 디폴트 값인 Round-Robin 스케줄러를 통해서 실행되고 있는 나쵸스 프로그램을, 아직 덜 구현된 Priority 스케줄러를 사용하여 구현한다. b) 상황 현재 PriorityScheduler 클래스에는 내부클래스로 PriorityQueue와 ThreadSate가 선언되어있고 이 중 ThreadState의 맴버함수중getPriority(), EffectivePriority(), SetPriority()가 아직 덜 구현되어있다. 기존에 정의되어있는 priority를 사용하면 심각한 deadlock에 빠질 가능성이 있다. 예를 들어 설명하면 3의 우선순위를 가진 스레드 A와 5의 우선순위를 가진 스레드 B가 있고 ..
[Nachos] 3. Alarm 클래스 구현 [Nachos] 3. Alarm 클래스 구현 1. 문제제기 a) 상황 및 목표 아직 미완성의 Alarm 클래스를 완성하는 것이다. 기존의 Alarm클래스는 sleep을 하지 않고 스핀을 통해서 원하는 시간까지 기다린 뒤에 스레드를 시작하는 코드로 구성되어 있다. 따라서 스핀하고 있는 스레드 때문에 하드웨어를 효율적으로 사용하지 못하는 코드이다. 따라서 Alarm의 wait을 호출한 스레드가 sleep하였다가 원하는 시간 후에 깨어나는 것으로 구현된다면, 다른 리소스가 CPU를 사용할 수 있게 된다. 위에 설명한 방식대로 Alarm을 구현하는 것이 목표이다. 이 때 하드웨어의 Timer의 도움을 받아서 구현한다. 2. 분석 및 알고리즘 a) Alarm.timerInterrupt() 코드 분석 b) Alar..
[Nachos] 2. Condition 클래스 구현 [Nachos] 2. Condition 클래스 구현 1. 문제제기 a) 목표 Semaphore로 구현 되어있는 Condition클래스를, 하드웨어 인터럽트를 사용하여 Condition2에 새롭게 구현한다. b) 상황 동기화를 위해 semaphore를 사용할 경우, user 프로그래머가 실수로 P와V의 순서를 반대로 생각하고 프로그램을 작성했을 경우, 심각한 Deadlock에 빠질 수 있다. 따라서 lock과 conditional variable을 분리시킨 monitor를 사용하면 이러한 실수나 예외적인 프로그램환경에서 프로그램이 돌아갈 수 있다. 2. 분석 및 알고리즘 a) Condition2.sleep() 코드 분석 b) Condition2.wake() 코드 분석 c) Condition2.wakeAll..
[Nachos] 1. KThread.join() 구현 [Nachos] 1. KThread.join() 구현 1. 문제제기 a) 목표 Nachos 소스코드에 아직 불완전하게 정의되어 있는 KThread 클래스에 join 기능을 추가하여, 여러 개의 스레드를 동시에 작동시킬 때Serialize(직렬화)를 가능하게 하게한다. b) 상황 현재 KThread에는 Join 기능이 구현되어 있지 않다. 따라서 먼저 job을 실행한 스레드가 나중에 job을 실행한 스레드 보다 일찍 끝난다는 보장이 없다. 때문에 어떤 한 스레드가 일련의 작업을 수행한 뒤, 그 결과를 바탕으로 다른 작업을 수행해야 한다면 병렬처리를 포기하고 하나의 프로세서로 batch 프로그래밍을 해야 하는 상황이다. 하지만 join기능을 이용하면 병렬처리를 하면서, 즉 CPU자원을 최대로 활용하면서 스레..
[운영체제] 생산자-소비자 문제 (Producer-Consumer Problem) 본 포스팅의 내용은 Operating System Concepts 10th, Operating Systems Three Easy Pieces를 참조하여 작성되었습니다. 운영체제는 여러개의 프로세스들이 동시에(Concurrently) 실행되는 것처럼 사용자에게 보여주거나, 실제로 여러개의 코어를 활용해 여러개의 스레드를 실행시킵니다. 이때 모든 프로세스나 스레드가 자신만의 독자적인 메모리 주소공간을 사용한다면 문제가 없겠지만, 스레드 간의 공유하는 메모리 주소공간이 있다면 문제가 생길 수 있습니다. 이러한 문제를 가장 직관적으로 잘 설명한 것이 생산자(Producer)-소비자(Consumer) 문제(Problem)입니다. 쉽게 설명하기 위해 아래 그림을 통해 예를들어 설명해 보겠습니다. 왼쪽에 있는 소비자..
[운영체제] 시스템 콜 (System Call) 본 포스팅의 내용은 Operating System Concepts 10th, Operating Systems Three Easy Pieces를 참조하여 작성되었습니다. 오늘은 운영체제를 배우다 보면 많이 접하게 되는 시스템 콜에 대해 알아보겠습니다. 시스템 콜 이란? 위키피디아의 정의에 따른 시스템 콜의 정의는 다음과 같다. 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다. 시스템 콜은 왜 필요할까? 우리가 일반적으로 사용하는 프로그램은 '응용프로그램..