| [ CnUnix ] in KIDS 글 쓴 이(By): unixboy (세탁소주인) 날 짜 (Date): 2003년 5월 28일 수요일 오후 08시 35분 58초 제 목(Title): Re: [질문]OS의 Context Switching 중에... context switching 자체가 CPU와 별 상관이 없는 동작입니다. context switching 은 OS에서 다수개의 process에서의 IO 작업의 delay 를 tolerate하기 위한 방안으로 나온거지 CPU에서 어떤 작업을 하는 것이 아닙니다. 단지 CPU는 switch-out 과 switch-back을 정확히 할 수 있도록 instruction을 제공합니다. 이것은 별다른 인스트럭션들이 아니고, pipeline 에 더이상 instruction을 불러들이지 않거나 또는 pivoting된 주소를 정확히 return address로 하기 위해서 일부의 register값을 버리고, 이미 pipeline의 단계에 들어온 주소를 그냥 사용하는 등의 처리를 합니다. 그리고, 안전하게 OS가 할일을 하고, 원하는 주소로 jmp(architect 입장에서) 또는 longjmp(unixer 입장에서) 하는 겁니다. 그럼 context switching 처리 자체는 어떻게? 99%의 OS가 이런거는 전부 assembler 로 구현합니다. RISC가 데체로 3 operand 시스템을 사용하기 때문에 이런것을 assembler로 구현하는데는 stack을 쓴다거나 하는 꽁수는 쓰지 않고 대게가 아주 깔끔한 코드를 배출합니다. 말씀드리지만, CPU는 context switching 을 위한 가능성을 제공합니다. context switching은 OS가 전부 관할하는 요소 입니다. 그리고, 이때 사용하는 instruction들은 대개가 context switching 뿐만이 아니고, mutual exclusion 이라든가 또는 lock_kernel()같은 Linux의 경우에 2.4.x 대 이상에서만 제공하는 커널 API를 구현하는데 쓰입니다. 상당히 유용하게 쓰이는 구조이죠. 아차, 그리고, pipeline 을 갖는 경우에는 대개가 branch prediction 을 위해서 PC가 2개 이상됩니다.context switching하는데 있어서 뭐 PC의 backup 같은 것은 별 무리가 없는 구조죠. @@ 나비처럼 날아서 벌처럼 도배하자 @@ |