프로세스와 컨텍스트 스위칭
프로세스 구조
- STACK
- 임시 데이터(함수 호출, 로컬 변수등)
- Return Address를 STACK에 저장하고 함수에서 필요한 공간을 할당한 뒤 나중에 다시 지운다.
- EBP 레지스터
- 현재 STACK의 최상단을 가리키는 주소가 들어가 있다.
- 함수가 함수를 부르다가 문제가 생기면 어떤 시점에 어떤 함수를 실행 시키다가 문제가 생긴지 알기 어려우므로 존재한다.
- EAX 레지스터
- Return 값을 가지고 있다.
- HEAP
- c언어의 malloc()과 같이 동적으로 특정 공간 할당
- Python은 생각하지 않아도 됨;;
- DATA
- 변수/초기화된 데이터
- CODE에 필요한 저장공간
- 공간의 크기가 정해져 있다.
- BSS
- 초기화 되지 않은 전역 변수
- DATA
- 초기값이 있는 전역 변수
- CODE(text)
- 컴파일된 소스코드가 저장된다.
- 함수선언
- STACK에 공간 사용해아 한다.
- 변수선언
- 메모리에 공간을 만들어야 한다.(DATA)
스택 오버 플로우
- Stack에 할당된 공간보다 더 뒤의 공간에 접근을 해서 return address의 값이 변경 되게 되어서 내가 원하지 않는 코드가 실행 될 수 있다. (해킹)
-
12345678void copy(char *bar){char data[6];strcpy(data,bar);}int main (int argc,char **argv){// argv의 크기가 6보다 크면 STACK영역에서 복사를 할때
bar의 값을 data에 넣는데 data의 end영역과 return address값에 이상한값이 들어가게 된다.copy(argv[1]);}cs
컨텍스트 스위칭(Context Switching) : 문맥 교환
- 원리
- 프로세스 A가 실행중이다가 스케쥴러가 프로세스 B로 바꿔 주는데 이 바꿔주는걸 컨텍스트 스위칭 이라고 한다.
- 매우 많이 일어나기 떄문에 어셈블리어로 작성되어 있다. (10ms단위로 바뀐다 → 매우 짧은 시간안에 바뀌어야 한다. )
- PC(Program Counter) + SP(Stack Pointer)
- PC
- 지금 Program에서 어디를 보고 있는지
- SP
- Stack Pointer에서 다음에 어디를 봐야 하는지
- PC
- PCB(Process Control Block)
- 프로세스를 running하다가 ready나 block가 되면 PCB에 PC와 SP를 저장 해 둔다.
- 나중에 다시 running하더라도 이전 상태를 이어서 작업 할 수 있다.
- Process ID
- Register 값(PC, SP등)
- Scheduling info(Process State) : Ready, Block, Running
- Memory Info(메모리 사이즈 limit)
- 우선순위
- 즉 프로세스가 실행중인 상태를 캡쳐/구조화 해서 저장하고 있다.
- 현재 프로세스의 PC/SP 를 PCB에 저장한다.(메인메모리)
- 실행할 프로세스의 PCB정보를 메인메모리에서 로드한다.
- 디스패치(dispatch)
- ready상태의 프로세스를 running상태로 바꾸는 것
- 디스패치(dispatch)
- 실행한다.
쉬어가기
- 컴파일러
- 초기 컴퓨터 프로그램들은 어셈블리어로 작성
- 서로 다른 CPU아키텍쳐가 등장할 떄마다 매번 똑같은 프로그램 작성(최적화지만 이식성이 떨어짐)
- 어셈블리어로는 프로그램 작성 속도가 매우 떨어짐(작업 속도)
- 리눅스의 경우 CPU별로 컨텍스트 스위칭 코드가 존재한다. ㄷㄷ
- 컴파일러 두두등장
- CPU아키텍처에 따라서는 컴파일러 프로그램만 만들면되고 , 기존 코드는 수정할필요가 없다.(이식성 증가)
- 어셈블리어로 작성한 코드보다는 작동 속도가 떨어 질 수 있다.
- 초기 컴퓨터 프로그램들은 어셈블리어로 작성
'취업 준비 > 운영체제' 카테고리의 다른 글
프로세스간 커뮤니케이션(IPC) (0) | 2020.12.30 |
---|---|
인터럽트 (0) | 2020.12.30 |
프로세스 상태와 스케쥴링 (0) | 2020.12.30 |
스케쥴링 알고리즘 (2) | 2020.12.30 |
프로세스 스케쥴링 기초 (0) | 2020.12.24 |