공부용 블로그

Context Switching 본문

설계/WebServer

Context Switching

tomato212 2018. 10. 2. 12:00



1. 프로세스는 메모리를 공유하지 않고, 스레드는 스레드간에 메모리를 공유한다.


어떤 영역을 공유하고, 공유하는 이유와 공유하지 않는 이유는?




메모리는 Code, Data, Stack, Heap 영역이 있음


쓰레드간에 Stack은 공유하지 않고, 나머지 3영역은 공유함






메모리를 공유하다보니 독립적인 프로세스와는 달리 쓰레드간 데이터를 주고받는 것이 간단해지고 


시스템 자원소모가 즐어든다. 응답 시간 또한 단축된다.


또한 멀티 프로세싱의 단점인 Context Switching의 오버헤드에 대한 부분을 해결해준다. 


프로세스 Context Switching의 경우 캐시메모리를 초기화 하게 되지만


쓰레드는 메모리를 공유하므로 꽤 큰 처리비용이 드는 초기화를 할 필요가 없어진다. 



1-1. 프로세스는 context switching 발생시 캐시메모리 초기화 vs 쓰레드는 초기화 하지 않음. 


캐시메모리는 프로세스 혹은 쓰레드 당 있는건지 다 합쳐서 하나밖에 없는건지?


캐시메모리는 cpu에 보통 내장되어 있음. 프로세스 간 전환될때 초기화한다는 것은 사용하는 캐시가 하나뿐이라고 추측됨. 





2. Context Switching이 발생하는 경우는?



1) 멀티태스킹




2) 인터럽트 처리




3) 사용자 및 커널모드 전환





2-1. 사용자 모드 및 커널모드의 차이점은?


- 커널모드


커널이란 운영체제의 핵심부분으로서 운영체제의 다른부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공. 


커널은 모든 자원(드라이버, 메모리, cpu 등)에 접근, 명령할 수 있다. 


커널모드에서 실행되는 모든 코드는 단일 가상 주소 공간을 공유한다. 


이는 커널모드 드라이버가 다른 드라이버 및 운영체제 자체로부터 고립되어 있지 않음을 의미한다. 



- 유저모드 


사용자 어플리케이션 코드를 실행한다. 


시스템 데이터에 제한된 접근만 허용되며 하드웨어에 직접 접근할 수 없다.


프로세스가 유저모드로 실행되다가 특별한 요청이 필요할 때 system call을 이용해서 커널에 요청함.




프로세스가 실행되는 동안에 수없이 유저모드와 커널모드를 왔다갔다 하면서 실행된다.



유저모드와 커널모드의 가장 큰 차이점은 접근 가능한 가상메모리의 범위이다. 


















'설계 > WebServer' 카테고리의 다른 글

mysql "too many connection" error  (0) 2018.10.10
FastCGI  (0) 2018.10.02
Web Server Architecture 마인드맵  (0) 2018.09.30
mysql connector/j download  (0) 2018.09.27
apache mpm 설정  (0) 2018.09.25