전체 글 (174) 썸네일형 리스트형 [ 운영체제 ] CPU Burst Prediction CPU 스케줄링 알고리즘 중 SJF 또는 SRTF는 CPU Burst Time 값을 통해 CPU를 할당할 프로세스를 결정한다. 그런데 어떤 프로세스의CPU Burst Time은 CPU에 직접 돌리기 전까지 알 방법이 없다. 그래서 CPU 스케줄링에 사용되는 CPU Burst Time은 실제값이 아닌 예측값이다. 이번 글은 CPU Burst Time을 예측하는 방법에 대한 글이다. CPU Burst Time은 편의상 CBT라고 하겠다. CBT를 예측하는 방법에는 크게 Static한 방법과 Dynamic한 방법이 있다. Static한 방법은 말 그대로 상수처럼 미리 정해놓은 값을 기반으로 예측하는 방법이고, Dynamic한 방법은 유동적인 예측 방법이다. 1. Static Method [1] Process .. [ 운영체제 ] 프로세스 스케줄링(Process Scheduling) 💡 이번 글에서 (프로세스, 쓰레드, Job, Task)스케줄링을 혼용해서 쓴다! 💡 Basic Concept CPU 스케줄링이란, ready 큐에 있는 프로세스 중 누구에게 CPU를 할당할 것인지 결정하는 알고리즘이다. 먼저, 이번 글에서 자주 쓰이는 용어에 대한 정리를 하겠다. CPU 스케줄러 : 프로세스 스케줄링을 수행하는 운영체제의 컴포넌트 모듈이다. 커널 안에 있는 알고리즘(코드)로 봐도 무방. Dispatch(er) : 스케줄러 안에 있는 모듈 중 하나로, 스케줄러에 의해 선택된 쓰레드에게 CPU를 할당하는 행위. CPU burst : CPU만 사용. ex) CPU burst time 작업 시작부터 종료까지 순수하게 CPU만 사용하는 시간. CPU bound : CPU를 많이 사용한다는 뜻. .. [ 백준 1038 ] 감소하는 수 https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 문제를 읽고 그냥 감소하는 수를 다 구하고 오름차순 정렬하면 될 것 같았다. 재귀 함수로 구현할 수 있는 문제다. 아래의 아이디어를 아주 약간만 응용하면 된다. 현재 숫자는 X X의 1의 자리 숫자는 k X * 10 + (k - α) 는 항상 감소하는 수다. 이제 감소하는 수를 구하는 함수 get_dec()를 살펴보자. void get_dec(long now, int last){ f.. [ 백준 2667 ] 단지번호붙이기 (C++) https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 경로 탐색 문제로, bfs와 dfs로 어렵지 않게 풀 수 있다. 두 가지 방법으로 모두 풀어 보았다. 그냥 단순히 모든 경로를 검사하면서 1이 적힌 위치에 가면 그 위치부터 bfs 또는 dfs를 돌리면 된다. 이때 count라는 변수를 두어 단지 안에 번호가 몇 개 있는지 세어준다. 모든 번호를 answer라는 벡터에 저장한 후, 마지막에 벡터를 정렬하고 출력해주기만 하면 된다. bfs 풀이 #in.. [ 백준 2294 ] 동전2 (C++) https://www.acmicpc.net/problem/2294 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주 www.acmicpc.net 문제를 읽고 bfs로 풀면 되겠다고 생각해 bfs로 풀었다. 아이디어는 간단하다. 모든 동전마다 몇 개의 동전이 필요한지 저장해주는 map이라는 1차원 배열을 생성한다. 만약에 사용 가능한 동전이 1,3원 이라고 가정하면, map[5] = 5원을 만드는 최소 동전(1,3원) 개수 map[8] = 8원을 만드는 최소 동전(1,3원) 개수 map[n] = n원을 만드는 .. [ 운영체제 ] 쓰레드(Thread) Thread 등장 배경 쓰레드는 프로세스의 단점을 보완한 새로운 실행 단위다. 사실 이전에 프로세스가 CPU의 실행 단위라고 했는데 사실은 쓰레드가 맞다. 이전까지는 엄밀히 말해서 '단일 쓰레드'라고 할 수 있다. 프로세스의 치명적인 단점은 fork()를 할 때 자식 프로세스에게 code~stack까지의 모든 메모리 공간을 새롭게 할당한다는 점이다. 이는 심각한 메모리 낭비다. 이해하기 쉽게 그림으로 알아보자. 위 그림과 같이 fork()에 의해 생성된 프로세스는 모두 새로운 메모리 공간을 할당받았다. 그런데 크롬창 네 개를 실행시키는 경우를 생각해보자. 같은 프로그램이기 때문에 비슷한 부분이 상당히 많을 것이다. 어떤 부분이 같고, 어떤 부분이 다를까? 그렇다.. 사실 stack 부분만 달라도 상관 없.. [ 운영체제 ] 프로세스간 통신, IPC (Interprocess Communication) 프로세스는 서로 데이터를 주고 받을 일이 많다. 대표적으로 PPT 파일을 인쇄하는 과정을 생각해 보자. PPT 프로세스는 인쇄할 데이터를 프린터 프로세스에게 전송해주고, 프린터 프로세스는 전송 받은 데이터를 가지고 출력을 하면 된다. 물론 자세하게 들어가면 훨씬 복잡한 과정이지만 일단 이렇게 알아두자. '데이터를 전송한다'의 의미를 메모리 관점에서 다시 생각해보자. 메모리의 크기는 한정적이기 때문에 프로세스가 차지하는 공간도 한정적이다. 프로세스 A가 프로세스 B에게 데이터를 전송한다는 것은 프로세스 A가 프로세스 B의 메모리 공간에 접근한다는 뜻이다. 그런데 이는 굉장히 위험한 행동(?)이다. 만약에 전송하는 데이터의 크기가 프로세스 B의 데이터 공간을 넘어선다면? 프로세스 B에 오류가 발생할 것이다... [ 운영체제 ] 프로세스는 누가 생성하고, 어떻게 생성될까? 프로세스는 누가, 어떻게 만드는 걸까? 우리는 프로세스에 대해 공부하면서 위와 같은 질문을 아직 하지 않았다. 딱히 의심도 하지 않았던 것 같다. 교수님께서 위와 같은 질문을 했을 때 '헐..그러네' 라는 생각을 했었던 기억이 난다. 그러면 바로 본론으로 들어가자. 프로세스는 과연 누가 만드는 것일까? 1. Who? 정답부터 말하자면 프로세스는 부모 프로세스로부터 생성된다. 따라서 모든 프로세스는 부모 프로세스를 가진다. 부모와 자식 관계이기 때문에 OS는 프로세스를 트리 자료구조로 관리한다. 모든 프로세스는 PID라는 고유 식별자를 가진다. PID는 PCB에 저장되어 있다. 그렇다면 태초의 프로세스, 그러니깐 모든 프로세스의 조상 프로세스는 어떻게 생성될까? 태초의 프로세스는 OS 입장에서 매우 중요하.. 이전 1 ··· 12 13 14 15 16 17 18 ··· 22 다음