Soft Ware/Windows System

0~3 까지의 특권 레벨 , Context switching

달려가보자 2011. 11. 5. 19:54

1. 특권 수준이 낮은 코드 세그먼트는 특권수준이 높은 데이터 세그먼트에 접근 할수 없다.

2. 특권 수준이 낮은 코드 세그먼트는 특권수준이 높은 코드 세그먼트로 프로그램을 실행 할수 없다. 이에 대해서는
   
   특별한 방법이 필요하다.

3. 특권 수준이 높은 코드 세그먼트에서 특권 수준이 낮은 코드 세그먼트로의 제어 이동은 불가능하다.


--------------------------------------------------------------------------------------------

멀티 프로세스 운영체제에서, 실행중인 프로세스가 변경되면 CPU에 올라와있던 레지스터들의 값이 다음 변경될 프로세스의 정보로 변경되어야 한다.
 
먼저 실행중이던 프로세스가 아예 끝났다면 모르겠지만, 프로세스의 실행이 완전히 끝난 것이 아니기 때문에 그 정보를 어딘가에 저장할 필요가 있다. 

그래서 먼저 실행중인 프로세스의 정보를 메인 메모리에 저장하고, 메인 메모리에 저장되어있던 다른 프로세스의 정보를 CPU의 레지스터로 불러 들이는 작업을 Context switching이라고 한다.

CPU에 올라온 프로세스는 Running 상태가 되고, 메모리에 저장된 프로세스는 Ready 상태가 된다.

Context switching을 지속하면서 멀티 프로세스 운영체제가 돌아가게 되는 것이고, 우리가 웹브라우저를 키고 동영상을 보는 작업같은 것이 가능해지게 되는 것이다(내부적으로 아주 작은 시간 단위로 계속 Context switching이 되고 있는 것이다).
 
어차피 프로그램 실행시간의 대부분은 I/O가 잡아먹는다고 한다. 입력을 대기할 시간동안 컨텍스트 스위칭을 통해 멀티 프로세싱을 구현하는 것은 상당히 효율적이긴 하다. 
 
하지만 이것이 너무 자주 일어나면 그만큼 성능 저하의 원인이 될 수 밖에 없다.

당연히 메모리와 CPU간의 데이터 전환에도 비용이 들 것이고, 이것이 빈번해지면 당연한 결과이다.

이 문제를 해결할 방법은 딱히 매뉴얼로 나와있지는 않다. 구현하는 프로그램 성격에 따라 달라진다.