일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 컴공복전
- BFS
- 알고리즘
- 데드락
- 동기화문제
- fork
- Deadlock
- 가상메모리
- Brute Force
- segmentation
- 삼성리서치
- 백준
- Memory Management
- exec
- paging
- 프로세스
- 운영체제
- dfs
- samsung research
- ascii_easy
- BOJ
- higunnew
- 시뮬레이션
- 백트래킹
- pwnable.kr
- 스케줄링
- 완전탐색
- 구현
- 김건우
- 삼성기출
- Today
- Total
목록분류 전체보기 (57)
gunnew의 잡설
CPU 스케줄링을 설명하기에 앞서 그 배경에 대해 잠깐 설명하자. 프로그램이 실행이 되면 어떤 프로그램이든 간에 다음과 같은 과정을 따라 수행이 된다. “load store”, “add store”와 같은 것들은 CPU에서의 instruction 즉, 기계어이다. 그리고 중간중간 I/O를 위한 작업이 있다. 그러니까 프로그램의 일반적인 구성상 CPU를 썼다가 I/O를 했다가 하며 반복적으로 번갈아 가며 수행될 것이다. 여기서 일련의 CPU instruction을 수행하는 단계를 CPU burst라고 하고 I/O를 수행하는 단계를 I/O burst라고 한다. 다음은 일반적인 job들의 CPU-burst time의 분포를 그린 것이다. CPU burst와 I/O burst의 수행 횟수를 비교해봤더니 I/O ..
프로세스 간 협력 원칙적으로 프로세스는 매우 독립적이다. 자식이 하나 생성되더라도 부모가 자식 프로세스를 먹여 살리는 것이 아니라 일단 생성만 되면 나머지 일은 자식 프로세스가 알아서 실행한다. 그러나 경우에 따라서는 프로세스가 협력을 해야만 효율적으로 실행되는 경우도 있을 것이다. 따라서 프로세스 간 협력 메커니즘이 존재한다. 그것을 IPC(Interprocess Communication)이라 한다. IPC에는 크게 두 가지 방법이 있다. 첫 번째는 message passing, 두 번째는 shared memory이다. Message passing 먼저 message passing은 프로세스 A가 프로세스 B와 서로 메시지를 주고받으며 실행되는 것이다. 그러나 프로세스는 원래 서로 독립적이기 때문에 자..
프로세스 복제, 프로세스 생성에 대해 다시 한번 상기해보자. 프로세스 복제는 프로세스의 문맥(Context)을 모두 복사하는 것이다. 부모 프로세스의 주소 공간 code, data, stack 영역을 그대로 복사하며 프로세스의 CPU 문맥 (Program Counter)를 복사하는 작업을 하는 것이다. 이렇게 일단 프로세스가 만들어지면, 부모 프로세스와 자식 프로세스는 서로 독립적인 프로세스가 되기 때문에 자원을 공유하려고 하지 않는 것이 원칙이다. 그러나 지난 번에도 언급했듯이 프로세스 문맥을 복사하는 것은 큰 overhead가 발생한다. 게다가 프로세스를 말 그대로 '복사'하는 것인데 똑같은 내용이 메모리에 또 올라간다면 너무나 큰 낭비가 아니겠는가? 따라서 리눅스와 같은 운영체제들은 부모 프로세스와..
프로세스는 어떻게 관리될까? 프로세스는 어떻게 만들어지고 어떻게 종료될까? 이번 강에서는 프로세스의 관리에 대해 설명한다. 프로세스 생성(Process Creation) 사람은 어떻게 태어나는가? 부모에 의해서 태어난다. 프로세스도 마찬가지이다. 부모 프로세스(Parent process)가 자식 프로세스(Children process)를 생성한다. 하지만 사람과는 다르게 프로세스가 자식을 생성할 때는 복제 생성을 하며 트리 계층 구조로 프로세스의 hierarchy가 만들어진다. 프로세스는 자원을 필요로 한다. 이 자원은 운영체제로부터 할당 받거나 부모 프로세스와 공유하게 된다. 하지만 부모로부터 자식이 생성되었다고 하더라도 각 프로세스는 서로 다른 프로세스이기 때문에 공유하지 않는 것이 일반적이며, 서로..
PS 백준 소스 코드 모음 : https://github.com/kgw4073/Problem-Solving https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선이 같은 위치를 갖는다. 아래 그림은 N = 5, H = 6 인 경우의 그림이고, 가로선은 없다. 초록선은 세로선을 나타내고, 초록선과 점선이 교차하는 점은 가로선을 놓을 수 있는 점이다. 가로선은 인접한 두 세로선을 연결해야 한다. 단, 두 가로선이 연속하거나 서로 www.acmicpc.net 이 포스팅은 적어도 내가..
드디어 스레드(Thread)와 프로세스(Process)의 차이를 구분할 수 있다! 운영체제 학습자의 숙원을 조금은 해소할 수 있게 된다. 결론부터 말하자면 스레드는 프로세스 내부에서의 CPU 수행 단위를 뜻한다. 이 말은 도대체 무슨 말일까? 이를 이해하기 위해서는 프로세스가 어떻게 관리되는지 상기할 필요가 있다. 프로그램을 실행하게 되면 프로세스가 생성된다. 프로세스가 생성되면 별도의 주소 공간이 할당되며 그 주소 공간에는 code, data, stack 영역이 만들어지고, OS kernel이 PCB(Process Control Block)를 만들어 해당 프로세스의 정보들을 저장한다. (PCB는 지난 3강에 걸쳐 설명하였다.) 만약 내가 거의 같은 일 혹은 비슷한 일들을 하는 프로그램을 여러 개 실행하..
문맥 교환 (Context Switch) CPU는 매우 빠르기 때문에 짧은 간격으로 여기 저기 프로세스를 돌아다니며 소유권을 점유당한다. 이 때 뺏겼다가 다시 얻었을 때는 뺏겼던 시점의 문맥을 기억했다가 계속 이어서 해주는 메커니즘이 필요하게 된다. 그 때 문맥 교환이 필요한데 이때 CPU에 존재하던 해당 프로세스의 정보들, 해당 프로세스의 PCB에 저장하며, PC와 memory map도 저장한다. 여기서 주의할 것은 프로세스의 문맥은 프로세스 A(현재 프로세스)의 PCB, 즉, 메모리에서 커널이 관리하는 데이터 영역에 저장하게 된다. 운영체제가 PCB로 프로세스를 관리하니까 당연히 PCB에 그 정보를 저장할 것이다. 아무튼 이 문맥 교환은 두 가지 양상이 존재한다. 첫 번째, 일반적으로 문맥 교환은 사..
운영체제라는 단어를 꺼내는 순간 분명히 이런 질문을 들을 것이다. 프로세스와 쓰레드의 차이는 무엇인가요? 혹은 프로세스와 프로그램의 차이는 무엇인가요? 아직 학교에서 운영체제 교과목을 듣지 않은 나조차도 수없이 들었던 질문이다. 그만큼 프로세스는 운영체제의 가장 핵심적인 개념이라 할 수 있다. 지난 강에서는 프로그램의 실행에 대해 알아보았다. 특히, 프로그램 스스로 할 수 없는 일을 할 때(I/O) 운영체제 kernel이 그 일을 어떻게 처리하는지에 대해 알아보았다. 따라서 이번 강은 지난 강의 연장선으로 I/O를 포함하여 프로그램이 요구하는 task들을, 운영체제는 어떻게 수행하고 관리하는지가 이번 강의 주제이다. 프로그램은 우리가 눈으로 볼 수 있게끔 파일로서 저장된 것, 즉, 실행 파일을 뜻한다. ..
1강은 어디가고 2강부터 시작하지? 그것은 나의 게으름으로 1장을 줄글 형태로 아직 바꾸지 못했다.. 1강도 곧 올릴 예정이다. 그 때는 2강 지우고 다시 올려야지! I/O의 실행 *동기식 입출력(synchronous)과 비동기식(asynchornous) 입출력 지난 강(?)에서도 강조했지만, I/O는 OS의 kernel을 통해서만 가능하다. 따라서 사용자 프로그램이 I/O를 하기 위해서는 인터럽트를 발생시켜 CPU 제어권을 해당 사용자 프로그램으로부터 OS로 넘겨주어야 한다는 것을 인지하자. 동기식 입출력과 비동기식 입출력을 구분하는 것은 간단하다. 동기식이란 말 그대로 입출력 작업이 끝날 때까지 기다리면서 프로그램을 진행하는 것이고, 비동기식이란 I/O device로 하여금 입출력 작업을 하도록 하고..
컴퓨터의 구조는 다음 그림과 같이 간단하게 나타낼 수 있다. 먼저 CPU는 메모리 하고만 일할 수 있다. 그러니까 오른쪽에 있는 I/O device와는 일할 수 없다. CPU는 정말 정말 빠른 속도로 일하는데 반해 I/O device와 같은 친구들은 너무나 느리기 때문에 같이 일을 하지 않는다고 생각하면 편하다. 그렇다고 해서 CPU가 정말 똑똑한 아이냐? 그렇게 말할 수는 없다. 단지 CPU는 매 클럭마다 메모리(Memory)에서 다음 instruction만 읽어 들여 그 일을 정말 빠르게 수행할 뿐이다. 이러한 이유로 사용자가 하드 디스크로부터의 파일 입출력이나 표준 입출력(키보드, 모니터를 이용한 입출력)과 같은 일들은 CPU가 담당하지 않고 device controller라는 각 device에 붙..