모든 프로세스는 CPU가 필요하다, 하지만 CPU자원은 한정되어 있다.
(타이머 인터럽트 : 클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 하드웨어 인터럽트이며, 타임아웃 인터럽트 라고도 한다)
한정된 시간에 프로세스는 이용하고 타이머 인터럽트가 프로세스가 다음 프로세스에게 CPU를 할당한다.
PCB는 프로세서 관련 정보를 저장하는 자료구조이다.
프로세스 생성시 커널영역에 PCB가 생성되고 종료시 폐기됨.
수많은 프로세스에서 PCB로 특정프로세스를 식별하고 처리하고 정보를 판단한다.
PID : 프로세스 ID
특정 프로세스를 식별하기 위해 부여하는 고유한 번호(학교의 학번, 회사의 사번)
레지스터 값
자신의 실행차례가 돌아오면 이전까지 사용했던 레지스터의 중간값을 모두 복원합니다. PCB안에는 프로세스가 사용했던 프로그램 카운터(다음 수행해야할 메모리주소)를 비롯한 레지스터 값들이 담깁니다.
프로세스 상태값
프로세스 상태정보 저장하는 공간,
EX) 현재 프로세스가
입출력 장치를 사용하기 위해 기다리고 있는 상태인지,
CPU를 사용하기 위해 기다리고 있는 상태인지,
CPU를 이용하고 있는 상태인지
CPU 스케줄링 정보
프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
** 모든 프로세스가 동일한 시간으로 CPU를 사용하지 않기 때문!
메모리 정보
프로세스가 어느 메모리 주소에 저장되에 있는지에 대한 정보(베이스 레지스터, 한계레지스터와 같은 값들)
페이지 테이블 정보
사용한 파일과 입출력 장치 정보
할당된 입출력 장치, 사용중인 (열린) 파일 정보
하나의 프로세스(프로세스 A)가 다른 프로세스 (프로세스 B)로 실행순서가 넘어가면?
기존에 실행되던 프로세스 A는 지금까지의 정보를 중간정보를 백업해야함!
하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어있다.
프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력 장치등....
이러한 중간 정보를 문맥(Context)이라고 한다. 그래서 다음 차례가 왔을 때 실행을 재개하기 위한 정보들이다. 🤓 즉!실행 문맥을 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있다.
뒤이어 실행할 프로세스 B의 문맥을 복구
자연스럽게 실행 중인 프로세스가 바뀜!
🥺 코드영역과 데이터 영역은 그 크기가 변하지 않는다.
프로그램의 구성하는 명령어나,코드영역의 크기가가 변할리 없고,데이터 영역은 프로그램 실행동안에만 유지될 데이터이기때문..
그래서 '크기가 고정된 영역'이라는 점에서 정적 할당 영역 이라고 한다.!
그렇다면 힙영역과 스택영역은 실행과정에서 크기가 변할 수 있기 때문에 '동적 할당영역'이라 한다.