일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Operating System
- 너비우선탐색
- DP
- OS
- Computer science
- 컴공과
- bfs
- 알고리즘
- coding
- 문제풀이
- cs
- 백준
- 개발
- 오퍼레이팅시스템
- 브루트포스
- 북리뷰
- 스택
- 컴퓨터공학과
- 구현
- 코테
- 자료구조
- 정석
- vector
- Stack
- 정석학술정보관
- c++
- 오에스
- 컴공
- 그래프
- 코딩
- Today
- Total
목록전체 글 (304)
Little Jay

Types of Process Scheduling Process를 스케줄링하는 것은 크게 세 가지로 분류된다. 먼저 Long-Term Scheduling이 있다. 이를 Job Scheduler라고도 하는데 이는 단순하게 시스템에 Program을 올릴지 말지를 결정하는 Scheduling이다. 다음으로는 Medium-Term Scheduling이 있다. 이를 Swapper라고도 부르는데 우리는 이전에 우리가 배운 Swapping 기법을 수행하는 Scheduler이다. 또한 Short-Term Scheduling이 있다. 이것이 우리가 초점을 두고 있는 CPU Scheduler이다. Processor가 어떤 Process를 수행할지 결정하는 Scheduling이다. 마지막으로 I/O Scheduling이 있..

Process Creation Direct하게 Process를 생성하는 방법은 다음과 같다. 먼저 a.out과 PCB를 위한 메모리 공간을 할댕해준다. 이때 a.out 파일의 code와 data를 메모리에 오리고 Call Stack을 생성해준다. 그 다음 PCB를 Initialize해준다. 이제 Process가 생성되었으니 이를 ready list에 올리고 execute하면 된다. Process를 생성하는 데에는 다양한 이유가 있다. 먼저 New Batch Job, 즉 load&run하는 경우에 OS가 JCL과 같은 일련의 batch job control stream을 제공해준다. 또한 Interactive Logon에서 새로운 Process가 생성이 되는데 예를 들어 User가 새로운 Terminal에..

Mode Switch Mode Switch는 단순히 Kernel Mode와 User Mode에 대한 전환이다. 따라서 Mode만 바뀌는 것이다. Mode만 바뀌고 있는 것이기 때문에 User에서 Kernel로 넘어갔다고 하더라도 Process의 전환이 일어난 것은 아니다. 예를 들어 Process A를 수행하고 있는데 System Timer Interrupt가 발생했다고 하자. 이 Interrupt는 필연적으로 User Level에서 Kernel Level로 전위가 일어나자민 여전히 Process A는 실행중이다. Process를 수행하는 환경만 바뀐 것이지 Process 자체가 바뀐 것은 아니다. 따라서 Mode Switch의 비용은 Stack에 save/load 하는 등의 Overhead밖에 들지 않..
샐리 케이건의 '죽음'이라는 책을 읽고 인간에게 죽음이란 어떤 존재인가, 죽음에 대해 어떠한 자세를 가져야 현재의 삶을 자유롭게 누릴 수 있을까 등의 연쇄적인 생각이 계속해서 났었는데 도서관에서 책 추천 목록에 이 책이 있어서 한번 읽게 되었다. 책의 저자인 빅터 크랭클은 오스트리아 빈에서 태어난 유대인 의사이다. 그는 나치 강제 수용소에서 희망이 없는 삶, 즉 오로지 죽음만이 존재하는 삶 속에서 아이러니하게도 ‘인간존엄성의 위대함’을 깨달았다. 전쟁이 종결된 후 프로이트의 정신분석과 아들러의 개인 심리학을 이어받아 정신요법 제 3학파로 불리는 ‘로고테라피 학파’를 창시했다. 이 책에는 ‘로고테라피’가 탄생하게 된 빅터 플랭클의 자전적인 기록과 삶의 성찰이 담겨있다. 1부는 강제 수용소에서 경험한 프랭클..
조금 짜증났던 구현문제 로마 숫자에 익숙하지 않아서 로마 숫자 개념을 이해하고 코드를 구현하는게 조금 어려웠다. Switch문을 사용할때 break를 안쓰게 되면 다음 Case로 넘어가기 때문에 이를 활용했다. #include #define endl '\n' using namespace std; string a; int t; int romanToNum(string& s) { int temp = 0; int aSize = s.size(); for (int i = 0; i < aSize; i++) { if (s[i] == 'M') { temp += 1000; } else if (s[i] == 'D') { temp += 500; } else if (s[i] == 'C') { if (s[i + 1] == 'M'..

Intro 앞서서 Process Control Information에 Process의 State가 들어간다고 언급했다. 이 State는 Process가 어떤 상태에 있는지 알려주는 것이다. 예를 들어 Processor가 1개인데 처리해야 하는 Process가 다수라면, Process는 Uni-Programming을 하고 있다면 하나의 Process만 처리할 수 있기에 나머지 Process는 대기하거나 Block되어야 한다. 이 State를 정의해주는 것이 Process State Model이다. 우리는 가장 간단한 Two State Process Model부터 Five, Seven까지 순차적으로 알아볼 것이다. Two State Process Model 가장 단순한 Processing Model이다. 이..

Process Description Process는 세 가지의 Context로 이해할 수 있다. 먼저 User Level Context가 있다. 이는 User Program의 기본적인 요소들(text, data 등)을 담고 있다. 또한 User Level에서는 Process가 실행될 때 Flow 및 복귀주소를 파악하기 위해 Stack 또한 돌아가게 된다. 따라서 User Level Context에서는 Program이 돌아가는 데에 필요한 Data, Memory의 Context라고 이해하면 될 것이다. User Data, User Code, User Stack 등이 이에 해당된다. 또한 우리는 이제 System Level Context에서 Process를 어떻게 정의해야 할 것인지 봐야한다. System ..

Program vs Process Program과 Process를 섞어서 많이 혼용한다. 그러나 두 용어는 본질적인 차이가 존재한다. 먼저 Program은 Passive Entity로서 디스크에 저장된 Binary Sequence이다. .data나 .text(code)들이 이에 해당한다. 반면 Process는 Active Entity로서 메모리에 올라간 Execution Sequence이다. Program은 따라서 메모리에 load 될 때 Process가 되는 것이다. 또한 하나의 프로그램이 여러 개의 프로세스로 나누어져 Multi Process가 될 수 있다. 하나의 프로그램이 여러 번 수행되는 것이 이에 해당한다. 따라서 다시 간략하게 두 용어의 차이는 실행 가능하거나, 실행 중, 혹은 처리기에 할당..
피보나치를 이용한 재귀 문제였다. Zeckendorf's theorem을 사용하는 문제였는데, 이분의 블로그를 보면 쉽게 이해가 가능하다. 결과적으로 피보나치 수가 n 보다 클 때 직전항을 빼주면서 재귀적으로 내려가면 된다. #include using namespace std; long long fibo[10000001]; void solve(int n) { if (n == 0) return; for (int i = 0; i n; solve(n); cout

System Calls System Calls(이하 Syscall)이라고 하는 것은 앞에서도 계속 언급해왔다. 정말 이를 간단하게 말하자면 함수의 호출이다. 그러나 그 의미를 조금 더 자세히 살펴보자면 Process가 특정한 Kernel Service를 요청하는 것이다. 이를 통해 Application Level에서 OS와 communicate할 수 있는 것이다. Sys Call의 목적은 결국 System Resource를 보호하고자 사용하는 것이다. OS 입장에서는 Kernel Level에서 동작하는 코드들은 Trusted, 즉 신뢰할 수 있는 것으로 여겨진다. 반면에 User Program의 Level의 코드들은 OS입장에서 Untrusted하다. 이를 Reliability 측면에서 본다면 User ..