코딩하는 해달이

[운영체제] 4주차 - 프로세스와 프로세스 관리 본문

학교 공부/운영체제

[운영체제] 4주차 - 프로세스와 프로세스 관리

코딩하는 해달 2023. 3. 27. 11:12

프로세스 개요

프로세스 개요

프로그램

  • 하드디스크 등의 저장 매체에 저장. 실행 파일의 형태

프로세스

  • 프로그램이 메모리에 적재되어 실행 중인 상태
    • 필요한 모든 자원을 할당 받음
    • 자원 : 코드 공간, 데이터 공간, 스택 공간, 힙 공간
  • 프로세스 특징
    • 운영체제는 프로그램을 메모리에 적재하고 프로세스를 다룸
    • 운영체제는 프로세스에게 실행에 필요한 메모리 할당, 이곳에 코드와 데이터 등 적재
    • 프로세스들은 서로 독립적인 메모리 공간을 가짐. 다른 프로세스의 영역에 접근 불허
    • 운영체제는 각 프로세스의 메모리 위치와 크기 정보를 관리한다.
    • 운영체제는 프로세스마다 고유한 번호 할당
    • 프로세스의 관한 모든 정보는 커널에 의해 관리
    • 프로세스는 실행-대기-잠자기-실행-종료 등의 생명 주기를 가짐
    • 프로세스 생성, 실행, 대기, 종료 등의 모든 관리는 커널에 의해 수행

프로그램과 프로세스

  • 프로세스들은 상호 독립적인 메모리 공간에서 실행

프로세스 관리

프로세스의 생성에서 종료까지, 관리는 모두 커널에 의해 이루어짐

  • 커널 영역에 프로세스 테이블을 만들고 프로세스들 목록 관리

관리 내용

  • 프로세스 생성, 실행, 일시 중단 및 재개, 정보 관리, 프로세스 통신, 프로세스 동기화, 프로세스 중단, 프로세스 컨텍스트 스위칭

프로그램의 다중 인스턴스

한 프로그램을 여러번 실행시키면 어떻게 될까?

  • 프로그램 실행 시 마다 독립된 프로세스 생성 → 프로세스들을 프로그램의 다중 인스턴스라고 부름
    • 각 프로세스에게 독립된 메모리 공간 할당
    • 각 프로세스를 별개의 프로세스로 취금

CPU 주소 공간

CPU 주소 공간

  • CPU가 주소선을 통해 액세스할 수 있는 전체 메모리 공간
  • 공간 크기
    • CPU 주소선의 수에 의해 결정
  • 32비트 CPU → 32개의 주소선 →2^32개의 주소 → 2^32 바이트 → 4GB 공간
    • 1번지의 저장공간 크기는 1바이트
    • 주소 공간은 0번지부터 시작
  • CPU 주소 공간보다 큰 메모리가 있어도 액세스 불가능
  • CPU 주소 공간보다 작은 양의 메모리는 액세스 가능
    • CPU가 설치된 메모리의 주소 영역을 넘어 액세스하면 시스템 오류

프로세스 구성 - 4개의 메모리 영역

1. 코드(CODE) 영역

  • 실행될 프로그램 코드가 적재되는 영역
    • 사용자가 작성한 모든 함수의 코드
    • 사용자가 호출한 라이브러리 함수들의 코드

2. 데이터(DATA) 영역

  • 프로그램에서 고정적으로 만든 변수 공간
    • 전역 변수 공간, 정적 데이터 공간
    • 사용자 프로그램과 라이브러리 포함
  • 프로세스 적재시 할당, 종료 시 소멸

3. 힙(HEAP) 영역

  • 프로세스의 실행 도중 동적으로 사용할 수 있도록 할당된 공간
    • malloc() 등으로 할당받는 공간은 힙 영역에서 할당
    • 힙 영역에서 아래 번지로 내려가면서 할당

4. 스택(STACK) 영역

  • 함수가 실행될 때 사용될 데이터를 위해 할당된 공간
    • 매개변수들, 지역변수들, 함수 종료 후 돌아갈 주소 등
    • 함수는 호출될 때, 스택영역에서 위쪽으로 공간 할당
    • 함수가 return하면 할당된 공간 반환
  • 함수 호출 외에 프로세스에서 필요시 사용 가능

프로세스 주소 공간

프로세스 주소 공간

  • 프로세스가 실행 중에 접근할 수 있도록 허용된 주소의 최대 범위
  • 프로세스 주소 공간은 논리 공간 (가상 공간)
    • 0번지에서 시작하여 연속적인 주소

프로세스 주소 공간의 크기

  • CPU가 액세스 할 수 있는 전체 크기
    • 32비트 CPU의 경우 4GB
    • 프로세스 주소 공간 크기는 프로세스의 현재 크기와 다름
  • 프로세스 주소 공간의 크기
    • 적재된 코드 +
    • 전역 변수 +
    • 힙 영역에서 현재 할당받은 동적 메모리 공간 +
    • 스택 영역에 현재 저장된 데이터 크기

프로세스의 사용자 공간과 커널 공간

프로세스 주소 공간 = 사용자 공간 + 커널 공간

  • 사용자 공간
    • 프로세스의 코드, 데이터, 힙, 스택 영역이 순서대로 할당
    • 코드와 데이터 영역의 크기는 프로세스 적재시 결정
    • 힙은 데이터 영역 바로 다음부터 시작, 
    • 스택은 사용자 공간의 바닥에서 시작하여 거꾸로 자람
    • 힙 영역은 높은 번지로 자라고 스택은 낮은 번지로 자람

결론

  • 프로세스의 코드와 데이터는 실행 파일에 결정된 상태로 코드 영역 과 데이터 영역에 적재 -> 실행 중에 크기가 변하지 않음
  • 프로세스는 사용자 공간의 최대 범위까지 동적할당 받으면서 힙 영 역과 스택 영역을 늘려갈 수 있음

커널 공간의 의미

각 프로세스

  • 독립된 사용자 공간 소유
  • 커널 공간 공유

커널 공간

  • 프로세스가 사용자 코드에서 시스템 호출을 통해 커널 코드 실행할 때 커널 공간 사용
    • 커널 코드를 실행하고 있는 것은 사용자 프로세스
    • 커널 코드가 적재된 물리 메모리의 위치 역시 사용자 프로세스가 소유한 매핑 테이블 사용

사용자 공간과 커널 공간의 결론

  • 프로세스마다 각각 사용자 주소공간이 있다.
  • 시스템 전체에는 하나의 커널 주소 공간이 있다.
  • 모든 프로세스는 커널 주소 공간을 공유한다.

프로세스의 주소 공간은 가상 주소 공간

프로세스의 주소 공간은 가상 공간

  • 프로세스가 사용하는 주소는 가상 주소이다.
    • 프로세스에서 0번지는 가상 주소 0번지
    • 가상 주소는 0번지부터 시작
    • 프로세스 내의 코드 주소, 전역 변수에 대한 주소, malloc()에 의해 리턴된 주소, 스택에 담긴 지역 변수의 주소는 모두 가상 주소
  • 프로세스의 주소 공간은 사용자나 개발자가 보는 관점
    • 사용자나 개발자는 프로그램이 0번지부터 시작하여
    • 연속적인 메모리 공간에 형성되고
    • 최대 크기의 메모리가 설치되어 있다고 상상
  • 실제상황
    • 설치된 물리 메모리의 크기는 주소 공간보다 작을 수 있고,
    • 프로세스의 코드, 데이터, 힙, 스택은 물리 메모리에 흩어져 저장됨

프로세스마다 주소 공간은 별개이다

프로세스 주소 공간은 가상 주소 공간이며, 가상 주소가 물리 주소로 매핑되므로, 물리 메모리에서는 충돌하지 않는다.

프로세스 테이블과 프로세스 제어 블록

프로세스 테이블(Process Table)

  • 시스템의 모든 프로세스들을 관리하기 위한 표
  • 시스템에 한 개만 있음
  • 구현 방식은 운영체제마다 다름

프로세스 제어 블록(Process Control Block, PCB)

  • 프로세스에 관한 정보를 저장하는 구조체 
  • 프로세스당 하나씩 존재 
  • 프로세스가 생성될 때 만들어지고 종료되면 삭제 
  • 커널에 의해 생성, 저장, 읽혀지는 등 관리

프로세스 테이블과 프로세스 제어 블록의 위치

  • 커널 영역, 커널 코드(커널 모드)만이 액세스 가능

프로세스 생명 주기와 상태 변이

프로세스의 생명주기

  • 프로세스는 탄생에서 종료까지 여러 상태로 바뀌면서 실행
  • 상태정보는 PCB에 기록되고, 상태가 바뀔 때마다 갱신됨

 

반응형

'학교 공부 > 운영체제' 카테고리의 다른 글

[운영체제] 5주차 - 스레드와 멀티스레딩  (0) 2023.04.21
[운영체제] 스레드 동기화  (0) 2023.04.17
[운영체제] 3주차  (0) 2023.03.20
[운영 체제] 2주차  (0) 2023.03.13
Comments