일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- segmentation
- 가상메모리
- 백트래킹
- 운영체제
- pwnable.kr
- exec
- BFS
- 컴공복전
- 김건우
- 데드락
- 동기화문제
- paging
- dfs
- BOJ
- 삼성기출
- higunnew
- 알고리즘
- ascii_easy
- 백준
- 삼성리서치
- 시뮬레이션
- fork
- Memory Management
- samsung research
- Deadlock
- 프로세스
- 스케줄링
- Brute Force
- 완전탐색
- 구현
- Today
- Total
목록프로세스 (6)
gunnew의 잡설
공유데이터 접근 문제는 High-level Language에서 한 문장에 해당하는 instruction이 Low-level에서 기계어로서 CPU에서 실행될 때 atomic하게 한 번에 처리될 수 없기 때문에 발생하는 문제이다. 이 문제 해결되기 위해서는 다음 조건들을 모두 충족해야 한다. 1. Mutual Exclusion (상호 배제) : 동시에 critical section을 수행하면 안된다. 2. Progress (진행) : 아무도 critical section에 없을 때, 해당 section에 들어가고자 하는 프로세스가 있으면 허락해 주어야 한다. 3. Bounded Waiting (유한 대기 시간) : 기다리는 시간이 유한해야 한다. 즉, starvation problem을 방지해야 한다. Al..
프로세스 간 협력 원칙적으로 프로세스는 매우 독립적이다. 자식이 하나 생성되더라도 부모가 자식 프로세스를 먹여 살리는 것이 아니라 일단 생성만 되면 나머지 일은 자식 프로세스가 알아서 실행한다. 그러나 경우에 따라서는 프로세스가 협력을 해야만 효율적으로 실행되는 경우도 있을 것이다. 따라서 프로세스 간 협력 메커니즘이 존재한다. 그것을 IPC(Interprocess Communication)이라 한다. IPC에는 크게 두 가지 방법이 있다. 첫 번째는 message passing, 두 번째는 shared memory이다. Message passing 먼저 message passing은 프로세스 A가 프로세스 B와 서로 메시지를 주고받으며 실행되는 것이다. 그러나 프로세스는 원래 서로 독립적이기 때문에 자..
프로세스 복제, 프로세스 생성에 대해 다시 한번 상기해보자. 프로세스 복제는 프로세스의 문맥(Context)을 모두 복사하는 것이다. 부모 프로세스의 주소 공간 code, data, stack 영역을 그대로 복사하며 프로세스의 CPU 문맥 (Program Counter)를 복사하는 작업을 하는 것이다. 이렇게 일단 프로세스가 만들어지면, 부모 프로세스와 자식 프로세스는 서로 독립적인 프로세스가 되기 때문에 자원을 공유하려고 하지 않는 것이 원칙이다. 그러나 지난 번에도 언급했듯이 프로세스 문맥을 복사하는 것은 큰 overhead가 발생한다. 게다가 프로세스를 말 그대로 '복사'하는 것인데 똑같은 내용이 메모리에 또 올라간다면 너무나 큰 낭비가 아니겠는가? 따라서 리눅스와 같은 운영체제들은 부모 프로세스와..
드디어 스레드(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들을, 운영체제는 어떻게 수행하고 관리하는지가 이번 강의 주제이다. 프로그램은 우리가 눈으로 볼 수 있게끔 파일로서 저장된 것, 즉, 실행 파일을 뜻한다. ..