본문 바로가기
CS/OS

프로세스 [혼공컴운]

by 블로블로글 2023. 12. 14.

프로세스

  - 실행중인 프로그램

  - 프로그램 vs 프로세스

    - 프로그램

      - 명령어 리스트를 내용으로 가진 디스크에 저장된 파일 (실행 파일)

      - passive entity (수동적 엔티티)

    - 프로세스

      - 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원 집합

      - active entity (능동적 엔티티)

  - 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됨

  - 포그라운드 프로세스

    - 사용자가 볼 수 있는 공간에서 실행

  - 백그라운드 프로세스

    - 사용자가 보이지 않는 공간에서 실행

    - 데몬 (UNIX 계열), 서비스 (윈도우)

      - 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 프로세스

  - 구조

    - 코드 영역 (텍스트 영역)

      - 실행 코드

      - 기계어로 이루어진 명령어 저장

      - 읽기 전용

        - CPU가 실행할 명령어가 담겨 있어 쓰기가 금지

      - 정적 할당 영역

        - 크키가 고정된 영역

    - 데이터 영역

      - 전역 변수

      - 프로그램이 실행되는 동안 유지되며, 프로그램 전체에서 접근할 수 있는 변수

      - 정적 할당 영역

        - 크키가 고정된 영역

    - 힙 영역

      - 프로그래머가 직접 할당하는 영역

      - 프로그램 실행 중에 동적으로 할당하는 메모리

      - 메모리 누수

        - 할당한 메모리 공간을 반환하지 않아 메모리 내에 계속 남아 낭비를 초래한 상태

      - 동적 할당 영역

        - 실시간으로 크기가 변화

    - 스택 영역

      - 데이터를 일시적으로 저장하는 공간

      - 함수를 호출할 때 임시 데이터 저장 장소

      - 함수 매개변수, 복귀 주소 및 지역 변수

      - 동적 할당 영역

        - 실시간으로 크기가 변화

 

    - 힙 - 스택 영역 관계 성

혼공컴운

        - 힙 영역은 메모리의 낮은 주소에서 높은 주소, 스택은 메모리의 높은 주소에서 낮은 주소로 할당됨

          - 힙 영역과 스택 영역에 데이터가 쌓여도 새롭게 할당할 주소가 겹치는 일을 최소화

 

    - C에서의 메모리 배치

운영체제 [Abraham Silberschatz , Peter Baer Galvin , Greg Gagne 저 , 박민규 역]

 

PCB (Process Control Block)

  - 프로세스와 관련된 정보를 저장하는 자료 구조

  - 운영체제가 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 분배하기 위해 이용

  - 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장

  - 약간의 회계 데이터와 함께 프로세스를 시작시키거나 다시 시작시키는 데 필요한 모든 데이터를 위한 저장소의 역할

    - 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기

    - 인터럽트등의 신호를 만나면 대기 상태에 들어갔다가 다시 실행

  - 커널 영역에 생성

  - 구성

    - 프로그램 카운터

      - 이 프로세스가 다음에 실행할 명령어의 주소를 가리킴

    - PID

      - 특정 프로세스를 식별하기 위해 부여하는 고유한 번호

    - CPU 레지스터

      - 누산기, 인덱스 레지스터, 스택 레지스터, 범용 레지스터들과 상태 코드 정보가 포함

      - 상태 코드

        - 현재 프로세스의 상태가 생성, 준비, 실행, 대시, 종료 중 어떤 상태인지 표시

    - CPU 스케줄링 정보

      - 프로세스 우선순위, 스케줄 큐에 대한 포이터와 다른 스케줄 매개변수를 포함

    - 메모리 관리 정보

      - 메모리 시스템에 따라 베이스 레지스터와 한계 레지스터의 값 저장

      - 메모리 시스템에 따라 페이지 테이블이나 세그먼트 테이블을 저장

    - 회계 정보

      - CPU 사용 시간과 경과된 시간, 시간 제한, 계정 번호 등을 포함

    - 입출력 상태 정보

      - 프로세스에 할당된 입출력 장치들과 열린 파일등의 목록이 명시

 

프로세스의 상태

  - 생성 상태

    - 프로세스가 메모리에 올라와 운영체제로부터 PCB를 할당 받은 상태
    - 바로 실행하지 않고 준비 상태에서 자기 순서를 기다리며, PCB도 같이 준비상태로 옮겨짐

  - 준비 상태

    - 생성된 프로세스가 CPU를 얻을 떄까지 기다리는 상태
    - 실행 대기 중인 모든 프로세스가 자기 순서를 기다림
    - CPU 스케줄러가 몇 개의 큐를 운영할지, 어떤 프로세스의 PCB를 실행 상태로 보낼지 결정
    - CPU 스케줄러가 dispatch(PID 사용)로 PCB를 선택하면 해당 PCB가 실행 상태로 변경

  - 실행 상태

    - 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
    - 타임슬라이스 동안만 작업 가능
      - 시간 만료시 timeout(PID 사용)을 실행

      - 준비 상태로 바뀜
    - 실행 상태 동안 작업 완료시 exit(PID 사용)을 실행

      - 프로세스 정상 종료
    - 실행 상태의 프로세스가 입출력 요청시 CPU가 입출력관리자 에게 입출력 요청시 block(PID 사용) 실행
      - block상태 진입하면 다른 작업은 진행이 불가능

      - 대기 상태로 옮기고 다른 작업 진행 가능

  - 대기 상태

    - 실행 상테에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
    - 대기 상태의 프로세스는 입출력장치 별로 마련된 큐에서 기다리다가 완료되면 인터럽트 발생
    - 인터럽트 발생 시 대기상태에서 해당 인터럽트로 꺠어날 프로세스를 찾음

      - wakeup(PID 사용)이라고 함
      - wakeup으로 해당 프로세스의 PCB가 준비 상태로 이동

  - 종료 상태

    - 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 종료하는 상태
    - 프로세스 제어 블록이 사라
    - 정상 종료

      - exit()으로 처리
    - 비정상적인 종료 발생

      - 디버깅을 위해 종료 직전의 메모리 상태를 저장장치로 옮김
      - 비정상적인 종료 발생시 처리하는 과정을 코어덤프라고 함

      - 코어덤프

        - 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모리 상태를 기록한 것