운영체제02-프로세스

stella·2022년 1월 5일
0

프로세스 개념

프로세스: 운영체제에서 하나의 작업단위를 뜻한다.
ex) 사용자가 마우스를 더블 클릭하여 프로그램을 실행하면 그 프로그램은 프로세스가 된다.

프로그램 vs 프로세스

프로그램프로세스
하드디스크 같은 저장장치에 보관되어 있다저장장치에 보관되어 있는 프로그램을 더블클릭으로 실행시켜 해당 코드가 메모리에 올라와 작업이 진행된다.
저장장치에 저장되어 있는 정적인 상태실행을 위해 메모리에 올라온 동적인 상태
짠다, 작성한다로 표현, 어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어 놓은 것실행한다로 표현, 프로그램으로 작성된 작업 절차를 실제로 실행에 옮긴다는 의미

프로그램에서 프로세스로의 전환

  • 프로세스는 컴퓨터 시스템의 작업 단위로 태스크라고도 부른다.

  • 프로그램을 메모리의 적당한 위치로 가져옴과 동시에 주문서와 같은 작업 지시서(프로세스 제어 블록)를 만든다.

  • 프로세스가 종료되면 프로세스가 메모리에서 삭제되고 프로세스 제어 블록도 폐기된다.

  • 프로세스 제어 블록(작업(프로세스) 지시서)

    1. 프로게스 제어 블록에도 프로세스를 처리하는 데 필요한 다양한 정보가 들어 있다.
    2. 프로세스 제어 블록이 없으면 프로그램이 프로세스로 전환되지 못한다.
    3. 어떤 프로그램이 프로세스가 되었다는 것운영체제로부터 프로세스 제어 블록을 받았다는 의미이다.
    4. 프로세스 제어 블록은 운영체제가 해당 프로세스를 위해 관리하는 데이터 구조이기 때문에 운영체제 영역에 만들어진다.

프로그램이 프로세스가 된다 → 운영체제로부터 프로세스 제어 블록을 얻는다는 뜻

프로세스가 종료된다 → 해당 프로세스 제어 블록이 폐기된다는 뜻이다.

운영체제도 프로세스인가?

운영체제도 프로그램이기 때문에 컴퓨터 전원을 켰을때 부트스트랩에 의해 메모리 영역에 올라가 프로세스 형태로 실행된다. 이후 사용자 프로세스가 실행되므로 컴퓨터에는 사용자 프로세스와 커널 프로세스가 섞여서 실행된다.

프로세스 상태

프로세스가 생성된 후 cpu를 얻어 실행되고 작업을 마치면 종료하게 된다.

일괄 작업 시스템인 경우, 프로세스 상태는 생성 실행 완료이다.

시분할 시스템에서의 경우, 프로세스 상태는 cpu를 얻어 실행중인 프로세스가 중간에 다른 프로세스에 cpu를 넘겨주는 일이 빈번하기 때문에 일괄 작업 시스템보다 복잡한 5가지 상태가 있다.

시분할방식

하나의 cpu는 한 순간에 하나의 프로세스만 실행할 수 있다. 그럼에도 여러 프로세스를 동시에 실행시킬 수 있는 것은 cpu가 처리하는 시간을 잘게 쪼개 여러 프로세스에 배분하는 방식으로 동작하기 때문이다.

대기 상태는 왜 있어야 하는가?

프로세스는 생성 준비 실행 완료라는 네가지 상태만으로 작업을 진행하는데 큰 문제가 없다 하지만 오늘날 운영체제의 효율성을 고려하여 대기라는 상태를 만들었다.

예를 들어, 인터럽트 시스템에서 프로세스가 입출력을 요구하면 cpu가 직접 데이터를 가져오지 않고 입출력 관리자에게 명령을 내린다. 이 상태에서는 프로세스는 요청한 작업이 끝날 때(입출력이 요구된 작업)까지 다음 작업을 할 수 없다. 따라서 cpu도 아무 작업을 하지 않고 기다리게 되어 효율성이 떨어진다

대기

입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태(요청한 작업이 끝날 때까지)대기상태라고 한다.

작업의 효율성을 높이기 위해 입출력을 요청한 프로세스를 실행 상태에 두지 않고 대기 상태로 옮겨둔 후

cpu에서는 준비상태에 있는 다른 프로세스 중 하나를 가져다 실행상태로 만든다

시스템 입장에서는 새로운 작업을 진행하게되어 효율성이 높아진다.

요청한 작업이 끝난 후 왜 실행상태가 아닌 준비상태로 두는가?

대기상태의 프로세스는 요청한 입출력이 완료되면 입출력 관리자로부터 인터럽트를 받는다.

원래대로라면 실행상태에서 대기상태로 옮겨온 것이기 때문에 입출력이 끝나면 실행상태로 돌려놓는것이 맞지만,

  1. 현재 실행 상태에 놓여 있는 프로세스를 준비 상태로 둠
  2. 입출력이 끝난 대기상태에 놓인 프로세스를 실행상태로 둠

→ 다음과 같이 두 프로세스를 변화시켜야하는 복잡한 상황이 발생한다.

따라서 입출력이 끝난 프로세스를 준비 상태로 두어 자신의 차례를 기다리도록 한다.

프로세스의 다섯가지 상태

생성 상태

  • 프로그램이 메모리에 올라오고 운영체제로 부터 프로세스 제어 블록을 할당 받은 상태이다.
  • 준비 상태에서 자신의 순서를 기다리며, 프로세스 제어 블록도 같이 준비상태로 옮겨진다.

준비 상태

  • 실행 대기중인 모든 프로세스가 자기 순서를 기다리는 상태이다. 프로세스 제어 블록은 준비 큐에서 기다리며 cpu 스케줄러에 의해 관리된다.
  • cpu 스케줄러는 준비 상태에서 큐를 몇개 운영할지, 큐에 있는 어떤 프로세스의 프로세스 제어 블록을 실행상태로 보낼지를 결정한다.
  • dispatch를 통해 준비상태에서 실행상태로 옮겨진다.

dispatch

cpu 스케줄러가 어떤 프로세스 제어블록을 선택하여 준비상태에서 실행상태로 옮길지 처리하는 명령어

실행 상태

  • 프로세스가 cpu를 할당 받아서 실행되는 상태이다.
  • cpu 개수 만큼 준비 상태에 있는 프로세스가 실행상태로 들어가게 된다.
  • 실행상태에 있는 프로세스는 자신에게 주어진 시간동안만 작업할 수 있다. 그 시간을 다 사용하게 된다면, timeout가 실행된다.
  • 실행 상태 동안 작업이 완료되면 exit가 실행되며 프로세스가 종료된다.
  • 실행상태에 있는 프로세스가 입출력을 요청하면 cpu는 입출력 관리자에게 입출력을 요청하고 block을 실행한다. 이렇게 되면 입출력이 완료되기 전까지 작업을 진행 할 수 없기 때문에 해당 프로세스를 대기상태로 옮기고, 다시 dispatch 해서 준비상태에 있는 프로세스를 가져온다.

timeout

실행상태에 있는 프로세스가 자신에게 할당된 시간이 끝나면 실행되는 명령어. timeout되면 프로세스는 실행 상태에서 준비 상태로 옮겨진다.

완료 상태

  • 프로세스가 종료되는 상태이다.
  • 코드와 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록을 폐기 한다.

휴식상태와 보류상태

앞서 얘기한 활성상태 외에 또 다른 상태가 있다.

  • 휴식상태: 잠시 작업을 멈춘것일 뿐 데이터가 메모리에 그대로 있고 프로세스 제어 블록도 유지되므로 프로세스가 멈춘 지점으로 부터 재시작 할 수 있다.
  • 보류 상태: 일시정지 상태로 프로세스가 메모리에서 잠시 쫒겨난 상태이다.

프로세스 제어 블록

모든 프로세스는 고유의 프로세스 제어 블록을 가지며 프로세스 제어 블록은 프로세스 생성시 만들어져서 프로세스가 실행을 완료하면 폐기된다.

  • 포인터

    준비상태나 대기상태는 큐로 운영되는데 프로세스 제어 블록을 연결하여 준비 상태나 대기 상태의 큐를 구현할 때 포인터를 사용한다.

  • 프로세스 상태

프로세스가 현재 어떤 상태에 있는지를 나타낸다.

  • 프로세스 구분자

운영체제 내에 있는 여러 프로세스를 구별하기 위한 구분자를 저장한다.

  • 프로그램 카운터

다음에 길행될 명령어의 위치를 가리키는 프로그램 카운터의 값을 저장한다.

  • 프로세스 운선순위

실제로 프로세스의 중요도는 각각 다르다. 사용자 프로세스보다 중요도가 큰 커널 프로세스는 우선순위가 높고 사용자 프로세스 끼리도 우선순위가 다르다.

우선순위 별로 대기상태의 큐도 다로 운영된다.

  • 각종 레지스터 정보

자신이 사용하던 레지스터의 중간값을 보관한다.

  • 메모리 관리 정보

프로세스가 메모리의 어디에 있는지 나타내는 메모리 위치 정보, 메모리 보호를 위해 사용하는 경계 레지스터 값과 한계 레지스터 값등이 저장된다.

  • 할당된 자원 정보

프로세스를 싱ㄹ행하기 위해 사용하는 입출력 자원이나 오픈 파일등에 대한 정보

  • 계정 정보

계정 번호, cpu 할당시간, cpu 사용시간

  • 부모 프로세스 구분자와 자식 프로세스 구분자

부모프로세스(PPID)와 자식 프로세스(CPID) 정보가 저장된다.

프로제스 문맥 교환

cpu를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업

문맥교환시 두 프로세스 제어 블록 상태

실행 상태에서 나가는 프로세스 제어 블록에는 지금까지 작업 내용을 저장하고
실행상태로 들어오는 프로세스 제어블록의 내용으로 cpu가 다시 세팅된다.
이렇게 두 프로세스의 프로세스 제어 블록을 교환하는 작업이 문맥교환이다.

문맥교환 절차

  1. 실행 상태에 있는 프로세스 p1이 자신에게 주어진 시간을 다 사용하여 타임아웃이 되면 p1의 프로세스 제어 블록에 현재까지의 작업 결과가 저장되고 p1은 준비상태로 간다.
  2. 준비 상태에 있던 p2가 실행상태로 가면 cpu의 레지스터가 p2의 프로세스 제어 블록 값으로 채워져 다음 작업을 하게된다.

문맥교환이 일어나는 경우

  1. 한 프로세스가 자신에게 주어진 시간을 다 사용하는 경우
  2. 인터럽트가 걸렸을때
    예를 들어, 한 프로세스가 자신에게 주어진 메모리 공간을 넘어가려고 할때 인터럽트가 발생하여 현재 실행중인 프로세스의 제어블록(p1)을 저장한 후 인터럽트 관리 프로세스(p2)를 실행상태로 만든다.
    이때 인터럽트 관리 프로세스는 메모리 범위를 넘어선 프로세스를 강제로 종료하고 인터럽트 처리를 마친다.
profile
뚠뚠뚠..

0개의 댓글

관련 채용 정보