본문 바로가기
반응형

혼자 공부하는 것들/운영체제12

[운영체제] Round-Robin, Priority, FCFS, SJF Scheduling 계산 연습문제 풀어보기 1. 문제 다섯 개의 배치 작업 A~E는 거의 동시에 컴퓨터에 도착하였다. 이들의 예상 실행 시간은 10, 6, 2, 4, 그리고 8분이다. (외부에서 정해진) 이들의 우선순위는 각각 3, 5, 2, 1, 4이며, 5가 가장 높은 우선순위이다. 아래 각 스케줄링 알고리즘마다 평균 Turnaround Time을 구하시오. 문맥 교환 오버헤드는 무시하시오. 나의 답안 (a) Round-Robin (우선순위를 두지않고 순서대로 시간단위로 할당) -(수행순서 C, D, B, E, A) 2+6+12+20+30 = 70 -> 70/5 =14 (b) Priority Scheduling(우선순위가 높은 프로세스를 먼저 프로세싱) 5가 가장높은 우선순위 -(수행순서 B, E, A, C, D) 6+14+24+26+32= .. 2020. 10. 4.
[운영체제] RR(Round-Robin)라운드 로빈, Priority Scheduling +(실습 Round-Robin, Priority c++ 코드 제공) Round-Robin과 Priority를 c++로 한 번 공부해 볼 것이다. Round-Robin이란? 라운드 로빈 스케줄링(Round Robin Scheduling, RR)은 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum)로 CPU를 할당하는 방식의 CPU 스케줄링 알고리즘이다. Priority이란? 우선순위 스케줄링(Priority Scheduling)는 프로세스의 중요도에 따라 순위를 매겨 처리한다. 프로세스의 의미에 따라 우선순위를 주고 높은 프러세스를 스케줄링하는 방법이다. Round-Robin.cpp 코드 // C++로 구현했습니다. #include #include #define NUM_PROC 100.. 2020. 10. 4.
Web Server 실습 +Dispatcher 사용 다중스레드 웹 서버에서 작업을 분배받는 과정을 producer-consumer 모델로 만 들어 본다. Dispatcher thread는 작업을 worker thread들에게 배분하며, 이때 한 개의 원형 큐가 버퍼로써 사용되게 설계해볼 것이다. Dispatcher란? CPU의 제어권을 STS(Short-Term Scheduling)에 의하여 선택된 Process에게 넘겨주는 모듈을 말한다. 인터럽트 또는 시스템 호출의 결과로 커널 모드에서 제어를 받는다. 디스패처는 모든 프로세스 전환 중에 호출되므로 가능한 한 빨라야한다. 요구사항 1. Dispatcher는 producer로써, 원형 큐(버퍼)에 작업 내용을 기록한다. 2. Worker는 consumer로써, 원형 큐(버퍼)로부터 작업 내용을 읽는다. .. 2020. 10. 2.
[운영체제]Producer/Consumer 실습 - 2 상호배제 java에서의 동기화 문제를 해결해보자! 코드를 분석해보자 public class ProducerConsumer { static final int N = 100; static producer p = new producer(); static consumer c = new consumer(); static our_monitor mon = new our_monitor(); public static void main(String args[]) { p.start(); c.start(); } static class producer extends Thread { public void run() { int item; while (true) { item = produce_item(); mon.insert(item); }.. 2020. 10. 2.
[운영체제]Producer/Consumer 실습 + 세마포어 변수 사용 생산자-소비자 문제란? 여러 개의 프로세스를 어떻게 동기화할 것인가에 관한 고전적인 문제이다. 한정 버퍼 문제(bounded-buffer problem)라고도 한다. 유한한 개수의 물건(데이터)을 임시로 보관하는 보관함(버퍼)에 여러 명의 생산자들과 소비자들이 접근한다. 생산자는 물건이 하나 만들어지면 그 공간에 저장한다. 이때 저장할 공간이 없는 문제가 발생할 수 있다. 소비자는 물건이 필요할 때 보관함에서 물건을 하나 가져온다. 이 때는 소비할 물건이 없는 문제가 발생할 수 있다. 세마포어란(Semaphore)? 세마포어(Semaphore)는 두 개의 원자적 함수로 조작되는 정수 변수로서, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로 사용된다. 이는 철학자들의 만찬 문제의 고전적.. 2020. 10. 2.
[운영체제] Race Condition, Mutual Exclusive(상호배제) 실습 Race Condition이란? 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황을 말한다. Race의 뜻 그대로, 간단히 말하면 경쟁하는 상태, 즉 두 개의 스레드가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상황을 말한다. Mutual Exclusive이란? 상호 배제라는 뜻으로 는 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘으로, 임계 구역(critical section)으로 불리는 코드 영역에 의해 구현된다. 공유 불가능한 자원의 예로는 동시에 실행되고 있는 프로그램간의 통신에 사용되는 비트 단위의 깃.. 2020. 10. 2.
[운영체제] 스레드(Thread) + 실습을 통해 직접 깨우치기! 프로세스와의 차이점? 일단 실습을 해보기전에! 스레드(Thread)는 무슨 역할을 하고 무슨 기능이있는지 간단하게 살펴보겠습니다. 스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다. 그러면 전에 공부했던 프로세스와 차이점은 무엇일까? 스레드와 프로세스의 차이점 프로세스는 서로 완벽히 독립적인 공간을 가진다. 각자가 각자의 스택과 데이터 영역을 가지고, 보호받는다. 프로세스는 시작할 때 운영체제에서 PCB와 메모리 공간을 할당받고 초기화하는 과정이 필요하다. 다른 프로세스의 영역을 들여다볼 수.. 2020. 9. 28.
[운영체제] 프로세스 상태 +실습을 통해 직접 깨우치기! 이번에는 프로세스 상태에 대한 공부를 해볼 것이다. 프로세스 상태는 new, ready, running, waiting, terminated로 나눠질수있습니다. 이런식의 로직을 가지고있다. 리눅스 기반에 운영체제에서 공부했습니다. running.c 코드 #include int main() { do { } while (1); } 아래와 같은 명령어를 사용해보자. gcc -o running running.c ./running & ps -l 1) ps -l 명령을 수행하면 프로세스의 상태는 어떻게 표시되는가? - R로 표기된다. 2) ps -l 명령을 반복하여 수행해보면 표시는 바뀌는가, 그렇지 않은가? - 바뀌지않는다. 3) 이 표시가 의미하는 프로세스의 상태는 무엇인가? - 실행중 또는 실행가능 (실행 큐.. 2020. 9. 28.
[운영체제] fork 실습 -2 fork가 어떻게 프로세싱 되는지 실습을 해보았다. hello.c 파일 /* * A file executed by child process * */ #include #include int main(void) { do { printf("I'm hello. I'm alive!\n"); sleep(5); } while (1); } fork3.c 소스코드 및 설명 /* * Fork a child process and execute a new program code. * */ #include #include #include #include #include int main(void) { int pid, status; char *arg[] = { "./hello", NULL } ; charch; pid = fork(.. 2020. 9. 27.
반응형