운영체제 (CSE30101) - Ch03: Process (1)

‍정진철·2022년 9월 22일
0

✅ 프로그램(Program)

  • 특정 작업을 하기 위해 해야 할 일들을 순서대로 나열한 것으로 실행 가능한 코드의 집합이 아직 메모리에 적재 되기 전의 상태 (보조기억 장치에 저장됨)

✅ 프로세스(Process)

"실행 중인 프로그램"

  • 프로세스는 현대의 컴퓨팅 시스템에서 작업의 단위이다.
  • 프로세스의 현재 활동의 상태는 프로그램 카운터 값과 레지스터의 내용으로 나타냄.
  • 각각의 프로세스들은 구분되기 위해서 네이밍 돼있음 (PID)
  • 프로그램 안에는 함수의 흐름이 존재(Control flower)하고 그러한 flow를 캡슐화한 것이 프로그램이라면 프로세스는 그러한 일련의 코드들을 encapsulation 한것이라 볼 수 있음.
  • 프로그램은 정적(passive entity)의 성질을 가지고 있지만 프로세스는 동적의 성질(activ entity) 가짐.

✅ Process Address Space (프로세스 메모리 배치)

  • 텍스트 섹션 -> 실행코드
  • 데이터 섹션 -> 전역변수
  • 섹션 -> 프로그램 실행 중에 동적으로 할당되는 메모리
  • 스택 섹션 -> 함수를 호출 할 때 임시 데이터 저장장소 (함수 매개변수, 복귀 주소 및 지역변수)

▶️ 텍스트 및 데이터 섹션의 크기는 고정되기 때문에 프로그램 실행 시간 동안 크기 변하지 않음.
▶️ 스택 및 힙 섹션은 프로그램 실행 중에 동적으로 크기 변화 가능
▶️ 스택 및 힙 섹션은 서로의 방향으로 커지더라도 서로 겹치지 않도록 해야함


✅ State Diagram

프로세스는 실행되면 그 상태가 변한다. 프로세스의 상태는 부분적으로 그 프로세스의 현재의 활동에 따라서 정의된다.

  • 새로운(new) : 프로세스 생성 중
  • 실행(running) : 명령어들이 실행되고 있다.
  • 대기 (waiting) : 프로세스가 어떤 이벤트(입출력 완료 또는 신호의 수신 같은)가 일어나기를 기다린다.
  • 준비(ready) : 프로세스가 처리기에 할당되기를 기다린다. (만반의 준비 완료 상태)
  • 종료(terminated) : 프로세스의 실행이 종료된다.

▶️ TImer Interrupt 발생시 운영체제 개입 -> 현재 운영중이었던 프로세스 ready 상태로 바꿈
▶️ ready -> running 이 되기 위해선 프로그램 스케줄러에게 채택되야함
▶️ running -> waiting : I/O요청 혹은 다른 프로세스가 인터룹트 걸었을 때.


✅ Process Control Block (PCB)

프로세스 제어 블록은 특정 프로세스와 연관된 여러 정보를 수록하며 다음과 같은 것을 포함한다.

  • 프로세스 상태: 상태는 새로운(new), 준비(ready), 실행(running), 대기(waiting) 또는 정지(halted) 상태 등이다.
  • 프로그램 카운터: 프로그램 카운터는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
  • CPU 레지스터들: CPU 레지스터는 컴퓨터의 구조에 따라 다양한 수와 유형을 가지다. 레지스터는 general-purpose를 가진것과 condition code의 정보가 담긴 레지스터가 있다. 프로그램 카운터와 함께 이 상태 정보는, 나중에 프로세스가 다시 스케줄 될 때 계속 올바르게 실행되도록 하기 위해서 인터러브 발생시 저장되어야 한다.
  • CPU-스케줄링 정보: 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함한다.
  • 메모리 관리 정보: 운영체제에 의해 사용되는 메모리 시스템에 따라 기준 레지스터와 한계 레지스터의 값, 운영체제가 사용하는 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함한다.
  • 회계 정보 : CPU 사용시간과 경과된 실시간, 시간제한, 계정 번호, 잡 또는 프로세스 번호 등 포함.
  • 입출력 상태 정보: 프로세스에 할당된 입출력 장치들과 열린 파일들의 목록 등 포함

✅ Context Switching (문맥 전환)

  • 인터럽트는 운영체제가 CPU 코어를 현재 작업에서 뺏어 내어 커널 루틴을 실행 할 수 있게한다.(이러한 연산은 범용시스템에서 자주 발생)
  • 인터럽트가 발생하면 시스템은 인터럽트 처리가 끝난 후에 문맥을 복구 할 수 있도록 현재 실행중인 프로세스의 현재 문맥을 저장할 필요가 있음.
  • 이건 결국 프로세스를 중단했다가 재개하는 작업
  • 이러한 문맥은 프로세스의 PCB에 표현됨. 문맥은 CPU 레지스터의 값, 프로세스의 상태, 메모리 관리 정보등 포함
  • 일반적으로 커널/사용자 모드이건 CPU의 현재 상태를 저장(state save) 하는 작업을 수행하고 나중에 연산을 재개하기 위해 상태 복구 작업(state restore)을 수행한다.
  • CPU 코어를 다른 프로세스로 교환하려면 이전의 프로세스 상태 보관하고 새로운 프로세스의 보관된 상태를 복구하는 작업 핑료 -> 문맥교환 (context swtiching)

▶️ 문맥교환이 일어나면 커널은 과거 프로세스의 문맥을 PCB에 저장하고, 실행이 스케줄된 새로운 프로세스의 저장된 문맥을 복구
▶️ 문맥 교환이 진행될 동안 시스템이 아무런 유용한 일을 못하므로 문맥 교환 시간은 순수한 오버헤드.
▶️ 문맥교환 시간은 하드웨어 지원에 크게 좌우됨


profile
WILL is ALL

0개의 댓글