알기쉽게 알려주세요
고수님들 컨텍스트스위칭이 뭡니까
우물안개구리(whiteprince)
2018-01-07 00:22
추천 0
댓글 15
다른 게시글
-
GUI용 자바나 파이썬 모듈 어케생각함? [2]익명(223.39) | 18.01.07추천 0
-
위키세계어가 자신보다 높은 프로그래머를 찾을 수 없는 이유익명(39.7) | 18.01.07추천 5
-
[c언어] int x에서 1의 개수 구하기 [23]dd(211.176) | 18.01.07추천 8
-
php미만잡이다 노드js고 flask고 jsp고 머고 [2]익명(218.49) | 18.01.07추천 0
-
세종대 컴공 갈거같은데 [7]djsjska(122.36) | 18.01.06추천 0
-
API 서버 Access-Control-Allow-Origin익명(222.121) | 18.01.06추천 0
-
ffffffff(110.47) | 18.01.06추천 0
-
플밍 아예 첨인놈한테 C로 입문시키는건 안좋은 생각인듯 [10]익명(175.223) | 18.01.06추천 0
-
C 떼고 나면 주 언어를 하나 파라는 건 너무 소인배 마인드 아닌지 [2]익명(175.223) | 18.01.06추천 0
-
123123fffff(110.47) | 18.01.06추천 0
코어가 하나인데 OS가 프로세스 간에 스케줄링을 해서 프로세스가 여러 개 돌아가는 듯한 환상을 만들어주는 거임
그건 그냥 시분할아닌가
위에 댓글들 보충하자면 cpu가 1개인데 OS가 여러개의process들이 동시에 실행되는 것처럼 느끼게 해주기 위해서 예를들어 40ms단위로 시간을 쪼개서 p1(40ms) p2(40ms) p3(40ms) p1(40ms) p2(40ms) p3(40ms) ... 이런식으로 번갈아가면서 실행시킴.
그러면 40ms가 지난 거는 어떻게 알 수 있을까? 이건 timer라는 하드웨어 device가 OS에게 특정시간마다 timer interrupt를 계속 날려줌. 그래서 만약에 1초에 100번의 timer interrupt가 일어난다면, 4번의 timer interrupt가 40ms에 해당될 것임. p1이 만약 40ms를 다 소모했다면, p2가 실행되어야 하는데 그러기 위해서는 가장 기본적으로 cpu에서 다음에 실행될 명령어를 저장하고 있는 instrunction pointer(IP) 레지스터값이 p1 버전의 IP에서 p2 버전의 IP로 바껴야됨.
IP외에도 다른 바껴야되는 register set들또한 p1 버전이었다가 p2 버전으로 바껴야됨.
그러기 위해서는 p1 전용의 p1만을 위한 정보들을 저장해두는 data공간(Process Control Block)에 p1의 register set을 저장해두고, p2의 PCB에서 register set을 cpu에 load시키면 된다.
이 과정이 context switching의 핵심임
어렵네요
프로세스마다 로지컬 레지스터, 프로그램 카운터, 프로세스 아이디, 페이지 테이블, tlb 같은 컨텍스트가 다 다르고, 프로세스 간 컨트롤이 넘어갈 때, 커널이 이 컨텍스트를 어딘가에 저장해두고, 새로 스케줄된 프로세스의 컨텍스트를 불러오는 과정이 필요함. 그래서 컨텍스트 스위치라고 부름
위에서 설명한 예시에는 process scheduling에 대한 내용이 빠져있는데, p1 p2 p3 p1 p2 p3 p1 p2 p3 ... 같은 순서를 결정하는게 process scheduling임. scheduling 정책에 따라 p1 다음에 p3가 실행될수도 있음.
제가 설명한 내용에는 page table, tlb에 대한정보가 생략되었는데, 페이지 테이블이나 TLB(Translation Lookaside Buffer)같은 내용은 가상 메모리 (Virtual Memory)관련 내용에 자세히 나오긴 하지만, 아직 프로세스 스케쥴링 배우고 있을거라 생각해서 뺐습니다.
배워갑니다
추가로 Process Control Block에는 process id, 스케쥴링을위한 정보(priority, status), 열려있는 file들을 관리하기 위한 file descriptor table, 자식 process들의 list, 부모 process, page table, page table base register, current working directory, 제가 위에서 설명한 register set같은것들을 저장하기 위한 kernel stack(user stack이랑 다름! interrupt handler가 실행될때 이 handler를 위한 함수의 call stack을 위한 용도로도 사용됨) 같은 정보들이 필요하겠죠?
Process Control Block또한 design 하기 나름이라 어떻게 디자인 하느냐에 따라 여러가지 형태를 가질 수 있음.
여기서 design이라는것을 예로 들자면 interrupt handler를 process의 kernel stack을 빌려가지고 실행할수도 있고, interrupt handler를 위한 전용 process를 생성하여 그 process의 stack을 쓸 수도 있음. 이건 진짜 말 그대로 OS design하는 사람 마음임.