OS : 프로세스

TechN0·2025년 1월 25일

운영체제 아주 쉬운 세 가지 이야기

  • 프로세스: 실행 중인 프로그램
  • 프로그램: 디스크상 존재, 실행을 위한 명령어와 정적 데이터의 묶음
  • 시분할:
    • 하나의 프로세스를 샐행
    • 얼마후 중단하고 다른 프로세스 실행
    • 이 작업을 반복하며 하나(또는 소수)의 CPU로 여러개의 가상 CPU가 있는듯한 환상을 만들어냄
    • 스케줄링 정책에 의해 뭘 실행할지 결정 됨

4.1 프로세스의 개념

프로세스: 아시겠지만 역시나 실행중인 프로그램

프로세스 구성요소를 이해하려면 하드웨어 상태를 이해해야 함

프로그램이 실행되는 동안 하드웨어 상태 읽기 / 갱신 가능

중요한 하드웨어 구성요소

  • 메모리(주소 공간)
    • 명령어는 메모리에 저장
    • 실행프로그램이 읽고 쓰는 데이터 도 메모리에 저장
  • 레지스터
    • 프로그램카운터(PC, 명령어 포인터IP): 프로그램의 어느 명령어가 실행중인지 알려줌
    • 스택포인터와 프레임 포인터: 함수의 변수와 리턴 주소를 저장하는 스택 관리

4.2 프로세스 API

OS가 반드시 API로 제공 해야 하는 몇몇 기능들

  • 생성: 새로운 프로세스를 생성
  • 제거: 프로세스를 강제로 제거
  • 대기: 프로세스의 실행 중지를 기다림
  • 각종 제어: 프로세스를 일시 정지 하거나 다시 시작하는 등의 기능 제공
  • 상태: 프로세스 상태 정보를 얻어냄

4.3 프로세스 생성 : 좀 더 자세하게

프로그램 실행을 위해 OS가 하는 첫 작업은

프로그램 코드와 정적 데이터(스테틱 데이터, 초기값을 가지는 변수 등)를 메모리, 프로세스의 주소 공간에 탑재(load)

  • 프로그램은 디스크 또는 플래시 기반 SSD에 실행 파일 식으로 존재

코드, 정적 데이터 메모리 탑재 후 OS가 하는 일

  • 특정 크기 메모리 공간이 프로그램에 스택 용도로 할당

    • C는 지역변수, 함수 인자, 리턴 주소등을 저장할 때 스택 사용
    • argc, argv 벡터를 사용해 스택 초기화
  • 힙을 위한 메모리 영역 할당

    • C는 동적 할당된 데이터 저장을 위해 힙 사용
    • malloc으로 공간 요청, free로 반환
    • 연결 리스트, 해시 테이블, 트리 등 가변적 자료구조를 위해 사용
  • 입출력 관계된 초기화 작업 수행

    • Unix에서 각 프로세스는 표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러(STDERR) 장치에 해당하는 파일 디스크립터를 갖음
  • CPU를 새로 생성된 프로세스에 넘기고 프로그램 실행


4.4 프로세스 상태

실행: 프로세스가 프로세서에서 실행중(명령어를 실행중)

준비: 프로세스 실행 준비는 되었지만 OS가 다른 프로세스 실행중 등의 이유로 대기중

대기: 프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시키는 연산(디스크 입출력 요청 등)


4.5 자료 구조

OS도 일종의 프로그램

다른 프로그램 처럼 다양한 정보를 유지하기위해 자료구조 갖고있음

  • 프로세스 리스트: 프로세스 상태 파악하기 위한 리스트
    • 준비 상태 프로세스를 위함
    • 실행중인 프로세스를 명시하기 위한 부가적 자료구조도 유지
  • 레지스터 문맥: 프로세스 중단 시 해당 프로세스의 레지스터 값 저장
    • 이 레지스터 값을 복원해 OS는 프로세스 실행 재개(문맥교환)

0개의 댓글