1️⃣ - 쓰레드 상태 (무엇이 있는지, 어떤 함수 또는 인터럽트등이 불려지면 어떤 상태로 전환되는지)
- thread에는 `Ready, Running, Dying, Blocked` 상태가 있고, ready_list에서 대기를 하다가 스케쥴러에 의해 running상태가 되었다가 running 상태에서는 sleep함수로 인해 blocked되면서 sleep_list로 옮겨지게 되고 대기 상태가 된다. 그리고 sleep_list에서 다시 unblock을 통해 ready_list로 가게되고 이 과정을 반복하다가 다 사용하게 되면 exit으로 종료처리가 된다.
2️⃣ - 스케줄링이 무엇인지? (1의 함수들 호출과 스케줄링 관계 설명)
- 스레드들이 ready_list에서 실행되기만을 기다리고 있는데, 무작정 실행 시켜 버리면
교착상태
에 빠지게 되어 무한정 기다리게 되는 현상이 일어날수도 있습니다. - 1번의 ready_list에서 running으로 동작되게 하는 스케줄링에는 여러가지 알고리즘이 있는데 해당하는 알고리즘으로 우선순위를 따져서 순서대로 실행을 시켜주면서 교착상태가 일어나지 않도록 하는 것입니다.
- 스케줄링에는
선점형
과비선점형
2가지가 있는데선점형방식
은 어떤 프로세스가 CPU를 할당받아 실행 중에 있어도 다른 프로세스가 실행 중인 프로세스를 중지하고 CPU를 강제로 점유할 수 있는 방식이고비선점형 방식
은 어떤 프로세스가 CPU를 할당받으면 그 프로세스가 종료되거나 입출력 요구가 발생하여 자발적으로 중지될때까지 계속 실행되도록 보장되는 것입니다. 단점으로는 실행시간이 긴 하나의 프로세스가 나머지 짧은 프로세스들을 오랫동안 대기할 수 있게 되는 상황이 발생하는 것입니다.
3️⃣ - 컨택스트 스위칭이란? + PCB
- 한 프로세스로부터 CPU를 다른 프로세스로 넘겨주는 행동입니다.
여기서Context
란 CPU가 해당 프로세스를 실행하면서 가지는 정보등을 뜻하는데, 이를 다른 프로세스로 바꾸겠다는 뜻입니다.이러한 정보들이 PCB(process control block)에 저장된다. 그래서 스위칭이 발생했을 때 이전에 하던일을 이어서 할수 있게 된다
4️⃣ - 동기화 수단 (무엇이 있는지, 각각을 비교) - semaphore, lock, monitor (mutex)
lock
이란? 임계영역에 진입하기 위해서는 락을 취득해야만 진입할수 있음, 그래서 락을 취득할때까지 기다리다가 취득하면 실행을 하게 되고, 실행을 마치게 되면 그 락을 반환하고 그 락을 다른 쓰레드가 취득하면서 실행이 되게 된다.spin lock
: while루프를 탈출할 수 있을 때까지 끊임없이 락을 취득하기 위해 반복하는 방식을 스핀락이라고 함. 계속해서 while루프를 돌기 때문에 CPU 사이클을 낭비한다.monitor(mutext)
: spin lock을 개선한 방식으로, 락을 취득할 수 있을 때까지 반복문을 도는 것이 아니라 락이 준비되면 깨워달라고 요청하고 대기 상태로 전환하는 방식
락을 취득하려고 할때 락을 누군가 사용하고 있다면 ready_list에 들어가고, 락을 가지고 임계영역에서 실행되고 있는 스레드가 실행을 마치고 락을 반환하면서 ready_list에 있는 쓰레드를 하나 깨우게 됨semaphore
: 하나 이상의 스레드가 임계영역에 접근 가능하도록 하는 장치 락 개수를 1개로 설정하는 것이 아니라, 다수로 설정하면서 락을 취득했을 땐 -1, 반환할땐 +1을 하면서 여러개로 사용할 수 있도록 만든 것입니다. 락 개수를 1개로 놓고 사용하면 mutex처럼 사용할 수도 있습니다.
뮤텍스와 세마포어의 또 다른 차이점은 뮤텍스는 락을 가진 사람만 락을 해제할 수 잇다는 점이고, 세마포어는 해당하는 값을 숫자로 제어만 할 뿐이지 락을 해제하는 것은 다를 수 있습니다.
임계영역
이란? 공유데이터의 일관성을 보장하기 위해 하나의 프로세스/ 스레드만 진입해서 실행 가능한 영역을 말합니다.
5️⃣ - 프로세스와 쓰레드의 차이점
프로세스
는 운영체제로부터 자원을 할당받은 작업의 단위이고스레드
는 프로세스의 내부에서 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위입니다.
프로세서는 각각 독립된 메모리 영역을 할당해주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수없지만, 스레드는 프로세스가 할당 받은 메모리 영역 내에서 stack 형식으로 할당된 메모리 영역을 따로 할당받기 때문에 다른 스레드에 접근할 수 있습니다.
6️⃣ - atomic이란?
- 가장 작은 최소단위의 실행을 얘기하며, 세마포어에서 값을 증가하거나 감소시킬때 atomic operation을 보장하기 위해서 ,interrupt를 disable 한다.
7️⃣ -스케줄링 알고리즘 (fifo, rr, ...)
비선점형
방식 : 하나의 프로세스가 끝날때까지 다른 프로세스들은 CPU를 이용할수 없음FIFO
(First In First out) : 가장 먼저 요청한 프로세스에 CPU를 할당하고 Queue로 구현한다SJF
(Shortest-Job-First) : 실행 시간을 이용해서 실행 시간이 가장 짧은 프로세스부터 자원을 할당해주는 방식이다. → 실행 순서대로 우선순위 큐로 스케줄링을 한다.HRN
: SJF 방식을 보완해서 만든 것으로 우선순위를 정하는 방식이 (실행시간 + 대기시간) / 실행시간 순으로 실행 순서를 정하고 실행시간이 낮을 수록 우선순위를 높게 받고 대기시간이 길수록 우선순위가 높아진다.
선점형
방식 : 하나의 프로세스가 끝나지 않더라도 우선순위를 따져서 CPU를 선점해올 수 있음Priority
(우선순위) : 프로세스가 Ready Queue에 도착하면 우선순위를 비교해서 가장 높은 프로세스에 CPU를 할당하는 방식 새로 도착한 프로세스가 현재 실행중인 프로세스보다 우선순위가 높다면 CPU를 획득할 수 있다.Round Robin
(라운드로빈) : 프로세스가 CPU에서 동작할 수 있는 시간을 할당해 준다. 라운드로빈 큐는 원형 큐로 설계되어 있어서 프로세스가 시간을 다 쓰면 OS가 인터럽트를 걸고 큐의 가장 뒤로 이동시킨다.
원본 노션 페이지 - https://sequoia-vinyl-565.notion.site/f06f6236ed904f1e8d05fb35e83fdd4d?pvs=4