Be myself :: 4. Task switching

달력

32024  이전 다음

  • 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

1 개요

이제 OS의 핵심적인 역할이라 볼 수 있는(필자의 생각에..ㅎㅎ) 멀티 태스킹이 어떻게 구현되는지 살펴보겠다. 일단, 커널단 에서의 멀티 태스킹을 살펴보고, 다음 장에서 세그먼트 보호의 개념을 다룬 후 유저영역에서의 멀티 태스킹을 살펴볼 예정이다. CPU에서 지원하는 멀티 태스킹 기술은 2가지가 있다. Call과 Jmp를 이용한 방법이 그것이다. 각 방법들을 하나하나 살펴보자.

2 태스크 스위칭과 tss

참고로 Real mode에선 멀티 태스킹이 지원이 되지 않는다. 따라서 멀티 태스킹은 protected mode에서 작동되고 인텔 80286이상에서 태스크 스위칭을 cpu레벨에서 지원한다.
여기서 멀티 태스킹이 무엇인지 짚어보고 가자. 말 그대로 음악을 들으면서 문서작업을 하거나 영화를 보면서 인터넷을 하거나 등의 여러 가지 일을 동시에 하는 것을 나타낸다. 하나의 프로그램을 실행시켰을 때, 하나의 '프로세스'가 생성되는데, cpu는 동시에 같은 프로세스를 처리 할 수 없다. 그렇다면 어떻게 멀티 태스킹이 된단 말인가?
이는 컨텍스트 스위칭 이라는 마술적인 기법을 사용하기 때문이다. 일정한 시간이 되거나, 어떠한 조건이 만족되면, OS의 스케줄러는 실행되고 있는 프로세스관련 메모리를 어떠한 메모리 영역에 저장을 하고 새로 시작되는 프로세스의 메모리들을 로드시켜 연산을 하는 것이다.
그렇다면 어떠한 메모리 영역에 저장을 시켜야 할까? 그것이 바로 TSS(Task state segment)이다.

TSS를 등록하기 위해선 TSS디스크립터를 GDT에 지정시켜 둔다.일단, TSS의 생김새부터 보고 가자.

그림의 설명을 보면 이해가 될 것이다.

그 다음 TSS를 선택하는 TSS세그먼트 디스크립터를 볼 순서인데, GDT의 생김새와 별 차이가 없고 Limit부분이 항상 0x67이상이어야 한다는 점과, Type에 B비트가 있는데, 이 부분은 이 태스크가 실행 중인지 혹은 실행을 기다리고 있는지를 나타내는 점이 다를 뿐이다. 따라서 별도의 그림은 생략한다.

2-1 JMP를 이용한 스위칭

지금까지 기본 배경지식을 알아 보았고 JMP를 이용한 스위칭 과정이 어떻게 되는지 그림을 통해 설명하겠다.

1. 프로그램이 Protected mode로 넘어오고 LTR명령으로 TSS영역을 저장한 후에 JMP TSS selector명령을 한다.
2. CPU내부의 TR레지스터와 GDTR레지스터를 참조하여 GDT에 있는 TSS selector를 찾는다.
3. TSS selector의 base Address를 참조하여 tss1영역을 찾는다.
4. Tss1영역에 현재 CPU레지스터값 저장
5. GDT에서 Tss2 디스크립터를 찾는다. 이 때, TR레지스터에 Tss 2 selector가 들어간다.
6. Tss 2 selector의 base Address를 참조하여 tss2 영역을 찾는다.
7. Tss2영역의 값 복원
8. 프로그램 실행.

2-2 Call명령을 이용한 스위칭

Call방식이 Jmp방식과 다른 점은 명령어 상에서 Jmp대신 Call을 한다는 점과 이전 태스크로 돌아가는 부분이 IRET로 바뀌는 것 뿐이다. 여기서 주의할 것은 IRET명령어가 인터럽트의 끝을 알리는 명령어와 동일하기 때문에 이를 구별하기 위해 TSS디스크립터의 B비트와 EFLAGS의 NT비트를 이용한다.

또 다른 차이점은 Call명령의 경우 비선점형 방식이라 실행되는 태스크에서 다른 태스크로 전환하는 명령을 수동으로 해 주어야 하는 반면 Jmp명령어는 컨텍스트 스위칭이 자유롭긴 하지만 유저모드의 태스크를 스위칭 하는데에는 약간의 문제점을 가지고 있다.

그럼, Call명령을 사용한 스위칭의 과정이 어떻게 이루어 지는지 그림을 통해 정리하고 끝을 내겠다.

 

'컴퓨터구조&OS > OS' 카테고리의 다른 글

6. 유저모드 Task switching  (0) 2014.05.05
5. 보호  (0) 2014.05.05
3. 인터럽트 처리  (0) 2014.05.05
2. Protected 모드로의 전환  (0) 2014.05.05
메모리 구조  (0) 2014.05.04
Posted by flack3r
|