[ CS ] 프로세스의 메모리 구조와 PCB

오세창·2024년 10월 8일

CS / 운영체제

목록 보기
4/4

프로세스


프로세스의 메모리 구조

운영체제는 위에서부터 스택, 힙, 데이터 영역, 코드 영역으로 나눌 수 있다.

  • 스택 : 지연변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이고, LIFO(Last In, First Out) 방식으로 운영된다.

    함수 호출 시 할당되고 함수 반환 시 소멸되며, 컴파일 시 크기가 할당된다.

  • : 힙 영역은 프로그래머가 직접 공간을 할당, 해제하는 메모리 공간이다.

    힙 영역에서 malloc() 또는 new 연산자를 통해 메모리를 할당하고, free() 또는 delete 연산자를 통해 메모리를 해제한다.

    힙 영역은 선입선출(FIFO, First-In First-Out) 의 방식으로, 가장 먼저 들어온 데이터가 가장 먼저 인출 된다.

    이는 힙 영역이 메모리의 낮은 주소에서 높은 주소의 방향으로 할당되기 때문이다.

  • 데이터 영역 : BSS 영역과 Data 영역으로 나뉘고 정적할당에 관한 부분을 담당한다.

    • BSS 영역 : 전역변수,static, const로 선언되어있는 변수 중 0으로 초기화 또는 초기화가 어떠한 값으로도 되어 있지 않은 변수 들이 이 메모리 영역에 할당된다.
    • 데이터 영역 : 전역변수, static, const로 선언되어있는 변수 중 0이 아닌 값으로 초기화된 변수 가 이 메모리 영역에 할당된다.
  • 코드 영역 : 소스코드가 들어간다.

    프로세스의 상태

  • 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태이다.

  • 준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태이다.

    프로세스 제어 블록은 준비 큐(ready Queue) 에서 기다리며 cpu스케줄러에 의해 관리된다.

    cpu 스케줄러가 dispatch(PID) 명령을 실행하여 준비상태에서 실행상태로 바뀌는 작업이 이루어진다.

  • 실행 상태 : 선택된 프로세스가 타임 슬라이스를 얻어 cpu를 사용하는 상태이다.

    실행상태에 들어가는 프로세스는 cpu의 개수 만큼이다.

    • 실행 상태에 있는 프로세스가 주어진 시간을 다 사용하면 timeout(PID) 가 실행되어 준비 상태로 전환
    • 만약 실행상태 동안 작업이 완료되면 exit(PID) 가 실행되어 프로세스 정상 종료
    • 프로세스가 입출력 요청시 CPU는 입출력 관리자에게 입출력을 요청 후 block(PID) 을 실행하는데 block(PID) 는 입출력이 완료될때까지 작업을 진행할 수 없기 떄문에 해당 프로세스를 대기 상태로 옮긴다.
  • 휴식 상태 : 프로세스가 작업을 일시적으로 쉬고 있는 상태이다.

    사용하던 데이터가 메모리에 그대로 있고 PCB도 유지되므로 프로세스는 멈춘 지점에서 부터 재시작할 수 있다.

  • 보류 상태 : 프로세스가 메모리에서 잠시 쫓겨난 상태로 일시 정지 상태 라고도 불린다.

    보류 상태의 프로세스는 메모리 밖으로 쫓겨나 스왑 영역에 보관된다.

  • 완료 상태 : 코드와 사용했던 데이터를 메모리에서 삭제하고 PCB 를 폐기한다.

    정상적인 종료는 exit() 로 처리하고 만약 오류나 다른 프로세스에 의해 비정상적으로 종료되는 강제 종료를 만나면 디버깅 하기 위해 강제 종료 직전의 메모리 상태를 저장장치로 옮기는데 이를 코어 덤프 라고한다.

PCB 와 컨텍스트 스위칭


PCB 란

PCB(Process Control Block)는 운영체제에서 관리하는 프로세스에 대한 메타데이터를 저장한 데이터블록

PCB 의 구조

  • 프로세스 상태 – 대기중, 실행 중 등 프로세스의 상태
  • 프로세스 번호(PID) – 각 프로세스의 고유 식별 번호(프로세스 ID)
  • 프로그램 카운터(PC) – 이 프로세스에 대해 실행될 다음 명령의 주소에 대한 포인터.
  • 레지스터 – 레지스터관련 정보
  • 메모리 제한 – 프로세스의 메모리 관련정보
  • 열린 파일 정보 - 프로세스를 위해 열린 파일 목록들

컨텍스트 스위칭이란

컨텍스트 스위칭이란 CPU 를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말한다.

프로세스1 이 작업을 수행하다가, 인터럽트나 시스템 콜이 발생했을 때 프로세스1 은 지금까지 작업하던 내용을 PCB 에 저장할 것이다.

이후 대기하고 있던 프로세스2 가 작업을 수행하고, 프로세스 도 작업이 일시중지되면, PCB 에 저장 후 프로세스 1 은 상태 복구 후 작업을 다시 수행한다.

컨텍스트 스위칭 비용

  1. 유후시간 발생 : 컨텍스트 스위칭 을 할 때마다 유후시간이 발생한다.

  2. 캐시 미스 : 프로세스1 이 실행 중일 때, 해당 프로세스의 페이지 테이블 매핑 정보는 TLB 에 캐싱된다.

    그러나 컨텍스트 스위칭 이 발생하면, TLB 에 저장된 프로세스1 의 매핑 정보는 지워지고, 프로세스 2 의 매핑 정보로 대체된다.

    이후 다시 프로세스1 으로 전환될 때, TLB 에는 프로세스1 의 정보가 없으므로 캐시 미스 가 발생하고, 시스템은 페이지 테이블을 다시 참조해 데이터를 로드해야 한다.

    이 과정에서 캐시의 이점을 잃고, 더 느린 메모리 접근으로 인해 성능 저하가 발생하는 것이다.

  3. 오버헤드 : CPU는 중단된 작업의 상태(레지스터, 프로그램 카운터, 메모리 매핑 등)를 저장하고, 새 작업의 상태를 로드해야 한다.

    이때 일정한 오버헤드 가 발생하게 되며 이 오버헤드 가 자주 발생하면 전체적으로 시스템 성능이 저하될 수 있으며, CPU의 유효 가동 시간에 영향을 미칠 수 있다.

참고자료


https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%A9%B4%EC%A0%91-cs-%ED%8A%B9%EA%B0%95/dashboard

https://all-young.tistory.com/17

https://www.youtube.com/watch?v=a2GDsaReFEA

https://dream-and-develop.tistory.com/168

https://velog.io/@kimtaehyeun/OS-CHAPTER03.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C-01.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EA%B0%9C%EC%9A%94

0개의 댓글