운영체제_프로세스 기술과 제어_프로세스 기술

미뇽·2024년 4월 9일
0

운영체제(강의)

목록 보기
7/43
post-thumbnail

프로세스 기술(decription)

운영체제는 컴퓨터 시스템에서 발생하는 사건들을 제어하면서 프로세스가 사용하는 시스템 자원들을 관리하는 개체이다.

멀티프로그래밍 환경에서 가상메모리에 여러 프로세스들이 존재하고 있다.
각 프로세서들을 한번 살펴보자

  • P1
    - 최소한 자신의 일부분은 주기억장치에 있으면서도 두 개의 입출력 장치에 대한 제어권을 가지고 수행되고 있다.
  • P2
    - P2 또한 주기억장치에 존재하지만 P1에게 할당된 입출력 장치를 얻기 위해 기다리면서 블록 상태에 있는 상태를 점선으로 표현하였다.
  • Pn
    - 주기억장치로부터 스왑아웃(swap out) 된 상태가 점선으로 표시되어 있으며, 현재는 보류 상태에 있다.

이렇듯 각각의 프로세스에는 상태가 존재하고, 이러한 상태를 운영체제는 계속해서 모니터링하고 자원들을 관리해야 할 필요성을 가진다.

운영체제 제어 구조

운영체제는 각 개체(프로세스)에 대한 정보를 관리하기 위해 개체에 대한 정보를 테이블로 구성해서 유지한다. 이러한 테이블의 구조는 아래와 같다.

여기서 운영체제가 관리해야 할 서로 다른 4가지 타입의 테이블은 메모리, 입출력 장치, 파일, 프로세스가 있다. 기본적으로 운영체제는 이러한 4가지 타입에 대한 정보는 유지한다. 이 4가지 타입의 테이블에 대해서 알아보자

메모리 테이블

메모리 테이블은 주기억장치(실메모리)와 보조기억장치(가상메모리) 모두의 자취(track) 를 유지하기 위해 사용된다. 메모리 테이블은 다음과 같은 정보를 가지고 있어야 한다.

  • 프로세스에게 할당된 주기억장치
  • 프로세스에게 할당된 보조기억장치
  • 어떤 프로세스가 특정 공유 메모리 영역에 접근이 가능한 속성 등의 주기억장치/가상메모리 블록들에 대한 보호 속성
  • 가상 메모리를 관리하기 위해 필요한 정보

입출력 테이블

입출력 테이블은 입출력 장치와 컴퓨터 시스템의 채널들을 관리하기 위해 사용된다.
입출력 장치는 특정 프로세스에 할당되어있는 경우/사용가능한 경우가 있으며 입출력 동작이 진행 중일 때 운영체제는 입출력 동작의 진행 상태와 입출력 전송의 출발지/목적지로 사용되는 주기억장치 내의 위치를 알아야만 한다.

파일 테이블

파일의 존재 여부와 보조기억장치에 저장된 파일의 위치, 현재 상태, 그 밖에 다른 속성들에 대한 정보가 저장된다.
이러한 정보들은 대부분 파일 관리 시스템에 의해 유지되고 사용된다.

프로세스 테이블

프로세스 관리를 위한 테이블이다. 각 프로세스들은 Hash로 연결된 연결리스트로 되어 있다.
메모리, 입출력, 파일 테이블 모두 프로세스를 위해 관리되는 테이블이기 때문에 프로세스 테이블은 이러한 자원들에 대한 참조가 직간접적으로 이루어져야만 한다.

이러한 테이블들은 그림 상으로는 분리되어 있는 것처럼 보이지만 서로 어떤 식으로든 연결되거나 상호 참조되어야 한다.

프로세스 제어 구조

운영체제가 임의 프로세스를 관리하고 제어하기 위해 알아야 할 사항들이 있다. 프로세스가 어느 곳에 위치하고 있는지를 알고, 프로세스를 관리하는데 있어 필요한 속성들을 알아야 한다.

프로세스 제어블록과 이미지

가장 먼저 프로세스는 수행될 하나의 프로그램 혹은 여러 프로그램 집합을 가지고 있어야 하며, 그 프로그램과 관련된 전역 및 지역 변수들, 미리 정의된 상수 등에 대한 데이터 위치들의 집합이 있어야 한다.
이렇게 구성된 프로세스는 프로그램 수행 시 프로시저 호출들의 트랙(track)과 프로시저들 간에 전달되는 매개변수, 호출 주소(복귀 주소) 등을 유지하는데 사용되는 스택이 필요하다.

이러한 속성들을 모두 담아 프로세스를 제어하기 위한 하나의 집합으로 만드는데, 이를 프로세스 제어블록이라고 하며, 프로그램과 데이터, 스택, 속성들의 집합을 프로세스 이미지라고 한다.

일반적인 요소를 다시금 짚어보자면

  • 사용자 데이터
    - 사용자 공간에서 수정 가능한 부분
    - 프로그래 데이터와 사용자 스택 영역
    - 수정될 수 있는 프로그램
  • 사용자 프로그램
    - 수행 될 프로그램
  • 시스템 스택
    - 각 프로세스는 하나 이상의 시스템 스택을 가진다
    - 스택은 프로시저와 시스템 호출에 필요한 매개변수와 호출 주소(복귀 주소)를 저장하는데 사용
  • 프로세스 제어 블록
    - 프로세스 식별
    - 주 프로세스 테이블에 대한 인덱스 -> 사상(mapping) 기법을 토함 프로세스 테이블 위치 파악
    - 작업에 대해 책임지고 있는 사용자 지시
    - 프로세스 상태 정보
    - 레지스터 집합(프로그램 상태 워드, PSW, Program Status Word)
    - 사용자가 사용 가능한 레지스터
    - 제어 레지스터 및 상태 레지스터
    - 스택 포인터
    - 프로세스 제어 정보
    - 스케줄링과 상태 정보
    - 자료구조화(Data Structuring)
    - 프로세스간 통신(IPC)
    - 프로세스 권한(Process Privileges)
    - 메모리 관리
    - 자원의 소유권과 이용률
    - x86 EFLAGS 레지스터

프로세스 위치

프로세스 이미지의 위치는 어떤 메모리 관리 기법이 사용되는가에 따라서 달라진다. 간단하게는 프로세스 이미지를 메모리(보조기억장치, 디스크 등에서 관리)의 연속된 인접 블록에 위치시키고 운영체제는 프로세스 이미지의 일부를 주기억장치 내에 유지함으로써 프로세스를 관리하기도 한다.

프로세스 제어 블록의 역할

프로세스 제어 블록들에는 스케줄링, 자원 할당, 인터럽트 처리, 성능 측정과 분석 등에 관련된 모듈들을 포함하여 운영체제의 모든 모듈에 의해 읽혀지고 수정될 수 있다. 따라서 프로세스 제어블록의 집합은 운영체제 상태를 정의한다고 말할 수 있다.

이러한 설계는 문제가 있다. 운영체제 내에 있는 수많은 루틴들은 프로세스 제어블록에 있는 정보들을 접근할 필요가 있기 때문에 각 프로세스의 유일한 ID를 Index로 사용하여 정보들에 접근할 수 있다. 하지만 이 과정에서 두 가지 문제점이 생긴다.

  1. 인터럽트 핸들러와 같은 단일 루틴에서의 버그가 프로세스 제어블록에 손상을 줄 수 있고 결국 해당 프로세스를 관리하는 시스템 기능이 파괴될 수 있음
  2. 프로세스 제어블록의 구조와 의미(semantics)부분의 설계가 변경되면 수많은 운영체제 모듈이 영향받음

이러한 문제를 해결하는 법은 운영체제의 모든 루틴들에게 핸들러(handler)루틴을 통하도록 요구함으로써 프로세스 제어 블록을 보호할 수 있다.

핸들러 루틴
프로세스 제어블록을 보호하는 것으로 제어블록에 대한 읽고 쓰기 연산을 제어하는 유일한 조정자 역할을 한다.

profile
문이과 통합형 인재(人災)

0개의 댓글