[시스템 소프트웨어]02-2 스케줄러, 쓰레드

yesman·2021년 12월 15일
0

시스템 소프트웨어

목록 보기
3/23

Process Implementation(프로세스 구현)

Process Control Block(PCB)
:프로세스에 대한 정보를 저장하고 있는 자료 구조이다. 구조체로 표현한다. UNIX에서는 u_block으로 정의하고 있다.(약 2-4kbytes 크기) 프로세스를 정보화한다.

Process Table
:PCB의 배열이다. 프로세스당 하나의 엔트리를 부여한다.

Field information(PCB에 저장되는 정보)
:프로세스의 상태에 관한 정보가 저장되어 있다. 어떠한 프로세스인지 알 수 있게 하는 모든 정보가 있다.
프로그램 카운터의 내용, 프로세스 상태 워드(PSW), 레지스터 내용, 스택 포인터의 내용, 메모리 관리를 위한 내용, 파일 시스템에 관한 정보(root, working directory 등)

Schedulers

스케줄러는 프로세스가 어떠한 순서로 실행되게 할 것인가를 정해준다. 시분할로 두개 이상의 프로세스가 원활히 수행될 수 있도록 한다.

세가지 종류의 스케줄러가 있다.

  1. Long-term scheduler(Job scheduler)-term이 길어서 수행 빈도수가 가장 낮다.
    최근에는 사용되지 않는 스케줄러이다. 대용량 저장 장치에서 수행을 기다리고 있는 프로세스들을 스케줄링한다. 프로세스가 담겨져 있는 곳 Process pool(job pool)에서 잡 스케줄러가 골라서 스케줄링 해준다.
    멀티 프로그래밍의 정도를 제어한다. 여기서 정도랑 생성되어 레디큐에 들어오는 프로세스 수와 실행이 끝나는 프로세스 수의 비율을 말한다. 만약 이 정도가 일정하다면 다른 스케줄러에 비해 많은 시간을 필요로 한다. 레디큐에 프로세스들을 올려주는 역할을 한다. I/O-bound와 CPU-bound의 적절한 조합이 필요하다. 보통 시분할 시스템에서는 이 스케줄러를 필요로 하지 않는다.

  2. Medium-term scheduler(Swapper)-수행 빈도수가 중간 정도
    suspend block에 들어갈 때 사용됨.
    프로세스 조합을 향상시키는데 필수이다. 보통 시분할 시스템에서 사용한다. 메모리에 프로세스를 할당 해야하는데 메모리가 꽉 차 있다면 뺄 프로세스를 swap-out하여 할당할 프로세스를 swap-in한다.

  3. Short-term scheduler(CPU scheduler)-수행 빈도수가 가장 높다.
    할당된 time slot이 끝날 때마다 사용된다.
    레디큐에서 실행 준비가 된 프로세스 중에 선택하고 CPU를 할당한다. 실행 빈도수가 높아서 빨라야한다.

Context Switch

다른 프로세스로 CPU를 할당하는 것은 이전 프로세스 상태를 저장하고 새로운 프로세스의 상태를 로드하는 것을 요구하는데 이것이 Context Switch이다.

process switch를 할때 cpu가 Pi에서 동작하다가 Pj에 할당된다. 이때 Pi의 PCB(state)를 save해주고 Pj의 PCB(state)를 load(restore)해준다.
여기서 Timer interrupt는 할당된 시간이 끝나서 스케줄러에서 정해준 다음 순서의 프로세스에 cpu를 할당해야 한다는 말이다.

context swtich 수행시 상태를 저장하고 로드하는 시간, 즉 오버헤드가 발생한다. 이 오버헤드가 없으면 Pj가 실행되지 않는다. 따라서 오버헤드를 줄이는 방법을 선택해야 한다. 오버헤드는 지원하는 하드웨어에 따라 커다란 차이를 나타낸다.

오버헤드를 줄이는 방법에는
1. 사용된 메모리의 읽고 쓰는 속도를 높인다.
2. cpu 내부의 register의 개수를 줄인다.
3. cpu가 context switch와 같은 동작을 하는데 유용한 특수한 인스트럭션을 가지고 있느냐의 유무에 따라 오버헤드의 크기가 달라짐.
4. 메모리 관리 기법.

오버헤드가 너무 크면 이것을 thrashing이라고 부른다. 프로세스가 실행이 되지 않고 switching만 일어나는 것이다.

오버헤드는 시스템 성능의 병목 현상을 일으킬 수 있는데 thread를 이용하여 해결할 수 있다.
thread는 오버헤드가 줄어든 프로세스이다.

Threads

쓰레드는 더 작은 프로세스 개념이다. context switch time이 프로세스보다 더 짧다.
프로세스는 주소 공간을 따로 따로 가지고 있다. 오버헤드가 크다.

반면 쓰레드는 가벼운 프로세스이다. cpu 수행의 가장 기본적인 단위이다. Thread Control Block에 들어가는 정보가 적다. Thread control block은 Program Counter, a register set, stack space를 포함한다. 쓰레드 간의 데이터 공유가 가능하기 때문이다. 같은 메모리 공간, 자원을 공유한다. 따라서 context switch시 오버헤드가 적다.

쓰레드는 서로 공유하므로 독립적이지 않다. 쓰레드가 다른 쓰레드의 정보를 변경할 수 있다. 모든 쓰레드가 모든 주소에 액세스할 수 있기 때문에 다른 쓰레드의 스택을 읽고 쓸 수 있다. 장점이라면 장점이지만 보호되지 않는다는 단점이 있다.

두가지 종류의 쓰레드가 있다. Kernel-level thread와 User-level thread.

profile
유니티

0개의 댓글