OS 공룡책과 패스트캠퍼스 강의, 이화여대 반효경 교수의 KOCW 강의를 정리하였다.
http://www.kocw.net/home/search/kemView.do?kemId=1046323
-
프로세스
- 프로세스 구조
- 코드(텍스트), 데이터(변수,초기화된 데이터), 힙(코드에서 동적으로 만들어지는 데이터), 스택(임시 데이터 - 함수호출, 로컬변수)
- Stack(임시데이터-함수호출, 로컬변수 저장), Heap(코드에서 동적으로 만들어지는 데이터 저장영역), Data(data 초기값O인 전역변수,bss 초기값X인 전역변수), Code(text)
- 컨텍스트 스위칭: 프로세서가 다른 프로세스로 스위치할 때, 시스템은 작업 중이던 프로세스의 상태를 PCB 레지스터에 저장하고 새로운 프로세스의 상태를 로드함. 이 것을 context switching이라 부름. 즉 PCB정보가 바뀌는 것을 컨텍스트 스위칭이라 함.
- PCB: 각각의 프로세스는 프로세스ID, 레지스터 값(PC, SP), 프로세스 상태(sheduling info), 메모리 정보가 담겨져있는 PCB를 가지고 있음. PCB를 이용해서 프로세스 상태정보를 관리함. 오버헤드가 엄청날 수 있음
- 실행 중지할 프로세스 정보(process A)를 해당 프로세스의 PCB에 업데이트 해서 메인메모리에 저장한다.
- 다음 실행할 프로세스 정보(process B)를 얻기 위해 메인 메모리에 있는 Process B의 해당 PCB 정보를 CPU의 레지스터에 넣고 실행
- dispatch: ready 상태의 프로세스를 running 상태로 바꾸는 것
- 프로세스간 커뮤니케이션
- IPC(interprocess communication)기법을 이용해서 프로세스간 상태를 확인하고 데이터를 송수신한다(성능향상을 위해)
- file, message queue, shared memory, pipe, signal, semaphore, socket 기법 등이 있음. 이들은 커널공간을 이용해서 커뮤니케이션함(프로세스간 공유되는 공간임)
- message queue
- shared memory
- pipe
- signal
- semaphore
- socket
- 프로세스 구조
-
쓰레드: 프로세스의 작업흐름. 하나의 프로세스가 동시에 여러 작업을 수행하면 멀티스레드. 멀티프로그래밍 시스템이니까 프로세스를 여러개 돌려도 되지만 스레드 를 나누는 것의 장점이 있음
-
특징: 프로세스는 독립적, 스레드는 프로세스의 subset
- 두 프로세스가 하나의 데이터를 공유하려면 IPC기법인 메세지패싱, 공유메모리, 파이프 등을 사용해야되는데 효율이 떨어지고, 구현하기도 힘듬. 프로세스 사이의 컨텍스트 스위치가 계속 일어나면 성능저하가 발생함. 스레드 전환 시에도 컨텍스트 스위칭이 일어나지만 속도가 더 빠르다.
- 쓰레드들은 하나의 프로세스에 여러 개의 스레드 생성가능함. 프로세스 안에 있어서 프로세스의 데이터를 모두 접근하는게 가능함. 각기 실행 가능한 stack이 존재함.
-
장점: 사용자에 대한 응답성 향상, 자원공유 효율, 작업 분리되서 코드 간결?(이건 작성하기 나름)
-
단점: 한 스레드만 문제가 있어도 전체 프로세스가 영향받음, 쓰레드를 많이 생성하면 컨텍스트 스위칭 때문에 성능저하됨.
** 멀티태스킹: 하나의 CPU에서 여러 프로세스가 실행
** 멀티프로세싱: 여러 CPU에서 여러 프로세스를 돌림(병렬 실행) → JoB을 쪼개서 여러 CPU에서 실행함. 스레드를 여러개 만들면 가능함.
-
동기화문제(syncronization): 프로세스는 동시에 실행될 수 있으며, 여러 개의 프로세스가 협력 할 때는 프로세스 사이에 데이터가 동기화되지 않는 문제가 발생할 수 있음. 프로세스가 어떤 순서로 데이터에 접근하느냐에 따라 결과값이 달라질 수 있는 상황을 race condition경쟁 상태라고 함.
→ 상호배제(mutual exclusion) 방식으로 해결. 스레드는 프로세스의 모든 데이터에 접근할 수 있으므로 여러 스레드가 변경되는 공유변수에 대해서 exclusive access가 필요함. (어느 스레드가 공유 변수를 갱신하는 동안에는 다른 스레드가 동시에 접근하지 못하도록 함)
코드상에서 race condition이 발생할 수 있는 특정 부분을 **critical section(임계영역)**이라고 함.
임계 영역이 끝나기 전에 다음 스레드로 context switching 되지 않도록 한다
-
세마포어: 여러 개의 프로세스나 스레드가 critical section에 진입하는 것을 막는 locking 매커니즘이다. 이를 통해서 다수의 프로세스나 스레드가 공유자원에 동시에 접근하는 것을 제어함.
**뮤텍스mutex(binary semaphore)**는 카운터를 이용해서 동시에 리소스에 접근할 수 있는 프로세스를 제한한다. 한 스레드가 임계영역에 들어갈 때 lock을 걸어서 다른 스레드가 접근하지 못하도록 하고 나올 때 unlock한다.
**세마포어(semaphore)**는 현재 공유 자원에 접근할 수 있는 스레드, 프로세스의 수를 나타내는 카운터를 두어서 동시에 리소스에 접근할 수 있는 허용스레드 수를 제어하는 방식. → busy waiting의 성능저하를 해결하기 위해 대기 큐 상태를 하나 더 추가해서 보완
-
deadlock: 교착상태, 무한대기상태. 두개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있어서, 다음 단계로 진행하지 못하는 상태. 쓰레드가 모두 wait 상태. 프로세스, 스레드 모두 이런 상태가 일어날 수 있음.
-
starvation: 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태. 자원이 부족해서 특정 프로세스는 실행이 계속 되지 않고 있는 상태이다. 이를 해결할려면 우선순위를 수시로 변경하거나, 우선순위 지정에 시간 요소를 넣던가, FIFO 요청큐로 실행하면 된다.(여러 프로세스가 부족한 자원을 점유하기 위해 경쟁하기 때문에, 특정 프로세스는 영원히 자원할당이 안되는 경우)
—> 상호배제, 점유대기, 비선점, 순환대기 4가지 조건의 성립시 deadlock 발생가능성 높아짐
-
'OS' 카테고리의 다른 글
3장. 컴퓨터 시스템의 동작 원리 (0) | 2022.09.10 |
---|---|
[OS] 가상메모리 개념 정리 (0) | 2020.11.16 |
[OS] 운영체제 구조, 스케쥴링 개념 요약 (0) | 2020.11.16 |
운영체제 주요 개념 키워드(공룡책 챕터 기준으로 구조화) (0) | 2020.11.16 |