본문 바로가기
CS/운영체제

프로세스(PCB,문맥교환 등)

by zieunee 2020. 12. 2.
반응형

프로세스

프로그램 vs 프로세스

  • 프로그램: 하드디스크같은 저장장치에 보관되어 있다가 마우스로 더블클릭하면 실행됨 , 코드가 메모리에 올라와서 작업을 진행된다는의미 > 저장장치에 저장되어 있는 정적인 상태
  • 프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
  • 프로세스를 실행한다? 프로그램으로 작성된 작업 절차를 실행에 옮긴다. > 누군가 작성한 프로그램이 실행되면 프로세스가 된다.

레시피 (프로그램) 를 통해 요리(프로세스)를 조리(실행)한다.

프로세스란?

  • 운영체제가 프로그램에메모리를 할당하여 실행하면 이를 프로세스라고 함
  • 프로세스는 메모리에 적재되어 실행되고 있는 프로그램
  • 프로세스는 커널에 의해 직접 관리된다 > 커널 메모리안에는 각 프로세스마다 관리하고 있는 프로세스에 대한 데이터들이 있음 이 정보는 PCB라고하는 자료구조안에 있는데 프로세스를 제어하는데 필요한 정보들이 담겨있음

일괄 작업 시스템

한번에 하나의 작업만 처리

ex> 레스토랑에 테이블 한개라 식사가 끝난 후에 다음 손님을 받을 수 있음 > 효율이 떨어짐

시분할 방식

시간을 적당히 배분 > cpu가 1개인 컴퓨터에서 여러 프로세스에 배분하여 동시에 실행함

프로세스 제어블록(PCB)

  • 운영체제는 프로그램을 메모리의 적당한 위치로 가져온다. 그와 동시에 주문서에 해당하는 작업 지시서를 만드는데 그게 바로 프로세스 제어블록(PCB)이다.

  • 프로세스 제어 블록에는 프로세스를 처리하는데 필요한 다양한 정보가 들어있음 > 이게 없으면 프로그램이 프로세스로 전환되지 못함

  • PCB중 대표적인 3가지

    • 프로세스 구분자
    • 메모리 관련정보
    • 각종 중간값 의 정보 등을 보관한다.
  • 프로그램이 프로세스가 되려면 메모리에 올라오는것 동시에 프로세스 제어블록이 생성되어야함 > 이런 제어 블록을 운영체제로부터 얻는 것

  • 프로세스 종료시 해당 프로세스 제어블록이 폐기된다.

문맥 교환

문맥교환이란? 문맥교환은 CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업. 이때 두 프로세스 제어블록의 내용이 변경됨.

실행 상태에서 나가는 프로세스 제어블록에는 지금까지의 작업 저장하고, 반대로 실행상태로 들어오는 프로세스 제어블록의 내용으로 CPU가 다시 세팅된다. 이전 작업상태가 되어야 다음 작업을 할 수 있기 때문이다.

  • 문맥교환이 일어나는 경우?
    • 프로세스가 주어진 시간을 다 사용하면 발생
    • 인터럽트가 걸렸을 때

프로세스 구조

프로세스는 코드영역, 데이터 영역 ,스택영역으로 구성이 됨

코드영역

프로그램 본문이 기술 된 곳. 텍스트 영역이다. 프로그램은 코드 영역에 탑재된다. 탑재된 코드는 읽기 전용으로 처리됨

데이터영역

코드가 실행되면서 사용하는 변수나 파일등의 각종 데이터를 모아놓는 곳. 데이터는 변하는 값> 읽기 쓰기가 가능하다.

스택영역

운영체제가 프로세스를 실행하기위해 부수적으로 필요한 데이터를 모아놓는 곳.

ex> 함수가 호출하면 함수를 수행하고 원래 프로그램으로 돌아올 위치를 이 영역에 저장 이 스택 영역은 운영체제가 사용자의 프로세스를 작동하기 위해 유지하는 영역> 사용자에게는 보이지 않는다.

프로세스의 생성과 복사

프로세스는 프로그램을 실행할때 생성

프로세스 실행 과정

  1. 사용자가 프로그램 실행
  2. 운영체제는 프로그램을 메모리로 가져와 코드영역에 넣음
  3. 프로세스 제어블록 생성
  4. 메모리에 데이터 영역과 스택영역 확보 후
  5. 프로세스 실행

이런 프로세스를 새로 생성하는 방법 뿐만이 아니라 실행 중인 프로세스로부터 새로운 프로세스 복사하는 방법도 있음 > fork()

fork()

  • fork()를 호출을 하면 실행 중인 프로세스와 똑같은 프로세스가 하나 더 만들어짐

  • 새로 생성이 될때 부모(기존에 있던 것)-자식(새로 만들어 진 것) 관계가됨

exec()

기존의 프로세스를 새로운 프로세스로 전환하는 함수

fork() 가 프로세스를 복사해서 exec() 로 프로세스를 전환하면 됨

반응형

'CS > 운영체제' 카테고리의 다른 글

운영체제 구조(커널, 시스템 호출)  (0) 2020.12.03
운영체제 깃헙 주소  (0) 2018.11.19