프로세스란?
프로세스는 여러 가지로 정의될 수 있으며, 일반적으로 실행 중인 프로그램이라는 개념으로 가장 잘 알려져 있다.
프로세스와 프로그램의 비교
프로세스는 능동성(activeness)을 띄고 있다면, 프로그램은 수동성(passivity)을 띄고 있다. 또한 여러 개의 프로세스를 통해 하나의 프로그램으로 구성될 수 있다. 이는 프로세스가 프로그램보다 작은 단위로 구성되어 있다고 해석할 수도 있다.
프로세스 메모리 내부 구조
위의 그림과 깊이 동적영역인 스택, 힙 영역과 정적 영역인 데이터, 텍스트 영역이 있다.
프로세스 5단계 상태 별 설명
시작(new) : CPU를 할당받기 위한 프로세스 초기 시작점.
준비(ready) : Admitted과정을 통해 CPU를 할당받을 수 있는 상태
실행(running) : Interrupt 작업을 거쳐 프로세스가 CPU를 할당받은 상태로, CPU에 의해 프로세스가 수행되어 명령어들이 실행 중인 상태이다.
대기(waiting) : I/O or 신호를 기다리는 상황. 프로세스가 CPU를 차지하여 실행되다가 신속한 처리가 필요한 사건이 발생하게 되면, 입출력 처리가 완료될 때까지 CPU를 양도하고 대기 큐에서 대기하고 있는 상태이다. 이렇게 대기 중인 프로세스는 이 긴급한 사건이 완성되어 마무리되면 원래 CPU를 다시 차지한다.
완료(terminated) : 프로세스가 CPU를 할당받아, 주어진 시간 내에 완전히 최종 수행을 종료한 상태, 종료된 프로세스는 시스템에서 제거된다.
PCB ( Process Control Block )
운영체제는 각각의 프로세스 정보를 관리하며 프로세스를 관리한다. 이 프로세스에 대한 정보는 프로세서 제어 블록(PCB)이라는 테이블 공간에 저장되며, 다른 임의 프로세스가 생성이 되면 이 프로세스의 정보를 저장하는 새로운 프로세스 제어블록이 생성되고, 이 프로세스가 종료될 때 같이 사라진다.
스케줄링 큐
작업 큐
주 기억장치의 할당을 기다리며 디스크에 있는 여러 프로세스들로 구성된다.
준비 큐
주 기억장치에 상주하여 준비 상태에 있고 CPU할당을 기다리는 프로세스들로 구성. 준비 큐의 헤더는 준비 큐 리스트의 첫 번째와 마지막을 가리키는 포인터를 가지고 있으며, 준비 큐의 각 PCB는 준비큐에 있는 다음 프로세스를 가리키는 포인터 필터를 갖는다.
장치 큐
특정 입출력 장치의 처리를 기다리고 있는 프로세스들의 리스트라고 할 수 있다. 특히 공유된 디스크 장치인 경우는 장치큐에 여러 개의 대기 중 상태의 프로세스들이 존재한다.
장기/단기 스케줄러
운영체제의 스케줄러 중 가장 주요한 장기스케줄러와 단기 스케줄러가 있다.
장기스케줄러(=작업 스케줄러)는 어떤 작업이 시스템에 들어와서 처리될 것인가를 결정하며 실행 빈도는 낮다. 일괄 처리시스템에서는 대개 즉시 처리될 수 있는 양보다 많은 작업이 들어온다. 이 작업들은 디스크와 같은 큰 저장 장치에 저장되어 있는데, 장기 스케줄러는 실행될 작업을 꺼내서 주 기억장치에 적재한다.
단기스케줄러(=CPU스케줄러)는 실행 빈도가 높으며 주기억장치 안의 실행 준비가 되어있는 작업들 중에서 실행할 작업을 선별하고 이를 적절히 CPU를 배당하는 일을 한다. 작업 시간은 대부분 ms단위로 측정될 정도로 매우 빠르다.
문맥 교환 ( Context Switch )
CPU가 다른 프로세스로 전환하려면 이전의 프로세스 상태레지스터 내용을 보관하고, 또 다른 프로세스의 레지스터들을 적재하는 과정을 문맥교환이라고 하며, 영어로 컨택스트 스위치라고도 한다.
즉, CPU를 사용하는 프로세스가 다른 프로세스로 새롭게 배당되는 교환과정을 문맥교환이라고 하며 일반적으로 문맥교환은 운영체제에서 자주 발생되므로 가능한 효율적으로 구현해야 하는 데 최근 운영체제에서는 문맥교환 스레드를 이용하여 처리한다.
여기서 문맥(Context)이란 CPU에 대한 여러 정보를 포함한 것을 말하며, 대표적으로 CPU 레지스터 값, 프로세스의 상태, 저장 장치 관리 정보 등이 있다.
문맥 교환의 처리과정
문맥교환은 중앙처리장치 이용률을 저해한다. 문맥교환 시간은 짧을수록 CPU의 효율이 좋아지므로 스레드 개념을 사용하여 문맥교환 시간을 줄이기도 한다.
여기서 연결되는 스레드에 대한 개념 역시 중요하다. 다음 포스팅에서 자세히 다뤄보겠다.
'IT' 카테고리의 다른 글
[운영체제 OS] CPU 스케쥴링 기본 및 선점형 비선점형 알고 가기 (2) | 2023.07.18 |
---|---|
[운영체제 OS] 스레드(Thread) 개념과 멀티 쓰레드 간단히 이해하기 (0) | 2023.07.16 |
데이터베이스 정규화 [ 1차, 2차, 3차, BNCF ] 알아보기 (0) | 2023.07.10 |
데이터베이스 설계 [개념적, 논리적, 물리적] 비즈니스 관점 (1) | 2023.07.07 |
데이터베이스 입문 [개념 및 특징 구조 설명] (0) | 2023.07.04 |