프로세스란?
실행중인 프로그램을 얘기한다.
Process Context
문맥? 프로그램이 어떻게 실행했는지, 현재 시점이 어떤 상태인지를 나타내기 위해 사용된다.
프로세스가 실행되면 프로세스만의 독자적인 주소공간이 생긴다.
CPU 가 이 프로그램에 해당되면 PC(프로그램 카운터)가 이 프로세스 코드 어느 부분을 가리키게된다.
기계어를 하나씩 읽어서 CPU 에 불러들인다 . R1~Rn 의 레지스터에 값을 넣고, ALU 연산 장치에서 뭔가 작업을 한다.
결과를 레지스터에 저장하거나 메모리에 저장하거나 한다.
이렇게 실행되는 중에 이 프로그램이 어디까지 진행이 되었나 볼 수 있는데
context다
문맥을 보기위해서는 PC가 어딜 가리키고 있나 , 코드에 어느 부분까지 실행되었나 를 알아야한다.
또 메모리에 어떤 내용을 담고 있나, 함수 같은걸 실행을 하면 스택에 뭔가 내용이 쌓여있을 것
이런 모든 내용들을 프로세스의 문맥이라고 한다.
크게 3가지로 나뉠 수 있다.
1. CPU 수행 상태를 나타내는 하드웨어 문맥
프로세스는 CPU 를 잡고 매 순간 인스트럭션을 사용하는데 ,
현재 어디까지 실행되었는가를 알려면
레지스터에 어떤값을 넣고 있었고 PC 가 뭘 가리키고 있엇는지에 대한 내용
2. 메모리 관련된 프로세스의 주소 공간
코드 , 데이터, 스택에 어떤 내용이 들어있는가
3. 운영체제의 역할 중 하나인 프로세스의 관리가 있는데
프로세스를 관리하기 위해 PCB 라는 자료구조를 둔다.
이걸 왜 알아야 하냐면 현대 컴퓨터 시스템에서는 프로세스들이 번갈아 가면서 실행되기 때문에
백업해두지 않으면 , 즉 이 프로세스의 문맥을 모르면 앞부분부터 다시 실행해야되기 때문에
문맥을 정확히 알아야한다.
프로세스는 상태를 바꿔가면서 실행을 한다.
컴퓨터에는 대부분 CPU가 1개밖에 없다.
CPU를 잡고있는 프로세스는 매 순간 1개다.
그래서 실행되고 있는 상태를 Running 이라 한다.
CPU 를 기다리고 있을땐 Ready , 레디는 당장 필요한 부분은 모두 메모리에 올라가 있는 상황이다.
실행을 위한 모든 준비가 되어있는 상태.
Blocked 는 I/O 작업을 해야한다던지, 오래 걸리는 작업을 진행하고있는상태
당장 실행할 수 없는 상태.
new - 생성 중인 상태 - ready (실행가능 상태) - running (cpu 얻은 상태)
- I/O 작업이 생긴 경우 blocked 상태로 넘어감.
- Timer 에 인터럽트 된 경우 ready 로 돌아감. 다시 줄 서있는 상황
역할을 다하면 terminated 로 간다.
커널의 Data 영역에 자료구조로 큐를 만들어놓고
프로세스 상태를 바꿔가면서 관리를 한다.
PCB - 각 프로세스마다 프로세스의 관련된 정보,
운영체제가 데이터 영역에 두고 있는 PCB 는 위와 같은 구성을 갖는다.
1. 운영체제가 관리 할때 사용되는 정보 문맥
프로세스 상태 , 프로세스의 CPU 를 주기위한 우선순위 정보 등
큐에서 프로세스를 가져와서 사용하는게 , 라운드 로빈 방식으로 가져와서 사용하는 것 같지만,
사실은 우선순위가 있다.
2. CPU 관련 정보 문맥
CPU 레지스터에 어떤 값들을 넣어서 사용하고 있었는가.
3. 메모리 관련 문맥
Code , data , stack 이 어느 메모리에 위치하는가
CPU 는 굉장히 빠른 자원이기 때문에
프로세스가 얻었다가 뺏겼다가 를 반복한다.
뺏기기전의 문맥을 기억했다가 얻었을때 다시 사용된다.
문맥교환 - CPU가 프로세스를 다른 프로세스로 넘겨주는 과정
프로세스 상태를 PCB 에 저장 하고 새로운 프로세스의 PCB를 읽어온다.
여기서 말하는 레지스터와 PC 는 하드웨어 자체를 말하고있고,
문맥교환 할때 save 하는건 커널 주소공간의 data 영역에서 PCB 로 저장을 하고 있다.
프로세스에서 다른 프로세스로 변경이 되어야 문맥 교환이라 할 수 있다.
보통은 인터룹투나 시스템콜이 발생해도 요청했던 프로세스에 제어권을 다시 돌려준다.
순서를 정해주는게 스케줄러다.
Long-term 스케줄러 --- Job 스케줄러
메모리를 어떤 프로세스에 줄 지 정한다.
프로세스가 new 상태에서 ready 상태로 넘어갈 때 , 메모리에 올리는 (admitted) 작업
Short-term 스케줄러 --- CPU 스케줄러
짧은 시간 단위로 스케줄이 발생한다.
어떤 프로세스에 CPU 를 줄지를 결정한다.
Medium- term 스케줄러 --- Swapper
우리가 사용하는 시분할 시스템에서는 프로세스가 실행되면 바로 메모리에 올리는데,
메모리에 너무 많은 프로그램이 올라가면 문제가 된다.
이 때 이 Swapper가 프로세스 통째로 디스크로 쫒아낸다.
Swapper로 인해 생겨난 프로세스 상태
'프로그래밍 > 운영체제' 카테고리의 다른 글
[운영체제] Process Management (0) | 2020.06.14 |
---|---|
[운영체제] Process2 - Thread (0) | 2020.06.14 |
[운영체제] System Structure & Program Execution 2 (0) | 2020.06.13 |
[운영체제] System Structure & Program Execution (0) | 2020.06.12 |
[운영체제] Introduction to Operating System (0) | 2020.06.11 |