archive
2. 프로세스 기술과 제어 (2) 본문
[2-3] 프로세스 기술 (description)
-"운영체제가 프로세스들을 제어하고, 그들에게 할당될 자원을 관리하기 위해서 필요한 정보는 무엇인가?
1. 운영체제 제어 구조 (운영체제가 제어하는 애들)
- 운영체제가 프로세스와 자원들을 관리하기 위해서는 이들 각각에 대한 현재 상태를 나타내는 정보를 가지고 있어야 한다
- 정보 제공 방법 -> 관리하고자 하는 각 개체에 대한 정보를 테이블로 구성하여 유지하는 것
-운영체제가 관리해야할 4가지 타입의 정보
메모리 테이블 | 주기억장치 (실메모리)와 보조기억장치 (가상메모리) 모두의 자취 (track)를 유지하기 위해 사용 주기억장치의 일부는 운영체제가 사용하도록 예약이 되어 있고, 나머지는 프로세스들이 사용할 수 있다 프로세스들은 가상메모리나 간단한 스와핑 기법을 사용하여 보조기억장치 내에 유지되기도 한다 메모리 테이블은 다음과 같은 정보를 가지고 있어야 한다 -프로세스에게 할당된 주기억장치 -프로세스에게 할당된 보조기억장치 -어떤 프로세스가 특정 공유 메모리 영역에 접근이 가능하다는 속성 등과 같은, 주기억장치 또는 가상메모리 블록들에 대한 보호 속성 |
입출력 테이블 | 입출력 장치와 컴퓨터 시스템의 채널들을 관리하기 위해 운영체제에서 사용 어떤 시점에 입출력 장치는 이용가능하거나 특정 프로세스에 할당되어있음 입출력 동작이 진행 중일 때운영체제는 입출력 동작의 진행 상태와 입출력 전송의 출발지와 목적지로서 사용되는 주기억장치 내의 위치를 알아야만한다. |
파일 테이블 | 파일 존재 여부와 보조기억장치에 저장된 파일의 위치, 현재 상태, 그 밖에 다른 속성들에 대한 정보가 저장된다. 이러한 정보들 대부분은 파일 관리 시스템에 의해 유지되고 사용될 수 있으며, 그러한 경우 운영체제는 파일에 대한 정보를 극히 일부만 유지하거나 전혀 유지하지 않는다. 어떤 운영체제는 파일 관리에 대한 자세한 사항들을 운영체제 자신이 관리한다. |
프로세스 테이블 | 프로세스 관리를 위해 유지하는 테이블 1. 4가지 타입의 정보 테이블은 서로 분리되어있는 것처럼 보이지만 어떤 식으로든 연결되거나 상호참조 : 메모리와 입출력 장치, 파일들은 모두 프로세스를 위해 관리되기 때문에, 프로세스 테이블에서 이들 자원에 대한 참조가 직접 혹은 간접적으로 이루어져야 한다. :파일 테이블을 통해 참조되는 파일들은 입출력 장치를 경유하여 접근될 수 있고 어떤 경우에는 주기억장치나 가상메모리 내에 존재해야 할 것이다 :이러한 테이블들은 운영체제에 의해 접근될 수 있어야 하므로 메모리 관리에 종속적이다 2. 운영체제가 처음에 이러한 테이블들을 생성할 지를 어떻게 알고있는가 : 명백히 운영체제는 주기억장치가 얼마나 있는지, 입출력 장치는 어떤 것들이 있고 어떨게 식별할 수 있는지 등과 같은 기본 환경에 대한 정보는 가지고 있어야 한다 : 운영체제가 초기화될 때 기본 환경을 정의하고 있는 몇 가지 환경 구성 데이터에 접근할 수 있어야 하며, 이러한 데이터는 사람이나 자동 구성 소프트웨어에 의해 운영체제 외부에 생성되어야 한다. |
2. 프로세스 제어구조 (운영체제가 ! 프로세스 제어할 때! 필요한 애들)
- 운영체제가 임의의 프로세스를 관리하고 제어하기 위해서는 아래의 사항을 알고 있어야 한다
: 프로세스가 어느 곳에 위치하고 있는지에 대한 위치 정보 ...(1)
: 프로세스를 관리하는 데에 있어 필요한 속성들 (프로세스 아이디 및 프로세스 상태 등) ...(2)
-> 프로세스 식별, 상태정보, 제어정보
(1) 프로세스 위치
- "프로세스는 물리적으로 어떻게 표현되는가?"
: (프로세스) = (자신의 프로그램) + (데이터를 적재시킬 수 있는 충분한 메모리) + (스택) + (수많은 속성)
: (프로그램) 최소한 프로세스는 수행될 하나의 프로그램 또는 여러 프로그램 집합을 가지고 있어야 한다
: (메모리) 또한 그 프로그램과 관련된 전역 및 지역 변수들, 미리 정의된 상수 등에 대한 데이터 위치들의 집합이 있어야 한다
: (스택) 프로그램 수행 시 프로저 호출들의 트랙과 프로시저들 간에 전달되는 매개변수 등을 유지하는데 사용되는 스택이 필요하다
(이거 약간 컨트롤 제트 누르면 선입후출되는 것처럼 전 프로시저로 돌아가는 그런 느낌 같음 -> 스택 사용 이유)
: (속성) 해당 프로세스를 제어하기 위한 속성들, 이들의 집합을 프로세스 제어블록이라고 부름
: 프로그램과 데이터, 스택, 속성들의 집합을 프로세스 이미지라고 부른다
즉, (프로세스 이미지) == (사용자데이터) + (사용자 프로그램) + (시스템 스택) + (프로세스 제어블록)
- 현대 운영체제는 프로세스 일부분만 주기억장치에 상주시켜 수행하는 것을 지원하기 위해 비연속적으로 물리적 메모리를 할당 및 회수하는 페이징 하드웨어를 가정한다
- 따라서 주어진 시점에 프로세스 이미지의 일부만이 주기억장치에 있고, 나머지는 보조기억장치에 있을 수 있다
- 따라서 운영체제가 유지하는 프로세스 테이블에는 각 프로세스 이미지에 대한 페이지들의 위치를 유지할 수 있는 필드가 존재해야 한다
-각 프로세스에 대해 하나의 항목을 가진 주프로세스테이블(primary process table)이 존재하고, 각 항목은 최소한 프로세스 이미지에 대한 포인터를 포함한다
-프로세스 이미지가 여러 블록으로 구성되어 있다면, 이 내용은 주 프로세스 테이블에 직접 저장 관리되거나, 메모리 테이블에 있는 상초 팜조가 가능한 항목에 의해 이용 가능하다.
(2) 프로세스 속성
- 각 프로세스에 대한 많은 정보들과 속성들은 프로세스 제어블록에 저장되며, 운영체제는 이를 요구한다.
프로세스 식별 |
-프로세스의 식별자 -프로세스를 생성한 프로세스 (부모 프로세스)의 식별자 -사용자 식별자 |
-모든 운영체제는 각 프로세스에게 유일한 식별자 할당 -이 식별자는 단순히 주프로세스테이블에 대한 인덱스임 -운영체제가 제어하는 많은 다른 테이블들도 프로세스 테이블을 상호참조하기위해 프로세스 식별자를 사용 -프로세스들이 서로 통신할 때 통신할 상대방을 운영체제에게 알려주기 위해 프로세스 식별자를 사용할 수도 있다 -프로세스들이 다른 프로세스를 생성할 때도 식별자를 이용하여 부모 프로세스와 자식 프로세스를 구별할 수 있다 |
처리기 상태정보 |
-사용자가 사용 가능한 레지스터 :처리기가 사용자 모드에서 수행하는 기계 언어에 의해 참조될 수 있는 레지스터 -제어 레지스터 및 상태 레지스터 : 프로그램 카운터, 조건 코드, 상태 정보 -스택 포인터 : 각 프로세스가 가지는 하나 이상의 시스템 스택 |
-처리기 레지스터 내용들로 수성된다 -프로세스가 수행되는 동안에는 그 정봅들이 레지스터 안에 저장, 그러나 프로세스가 인터럽트되어 중단되면 이후 다시 수행이 재개될 때 다시 그 정보를 복구하기 위해 모든 레지스터 정보들은 저장되어야 한다 -레지스터 집합 ) 사용자 가용 레지스터 + 제어 레지스터 + 상태레지스터 + 스택포인터 -프로그램 상태 워드라고 알려진 레지스터 또는 레지스터 집합이 처리기 내부에 포함된다. -프로세스 상태워드는 상태정보가 저장이 되는데, 대개 조건 코드 및 기타 상태 정보가 저장된다. |
프로그램 상태워드 |
-스케줄링과 상태 정보 -> 스케줄링 기능 수행을 위한 정보 : 프로세스 상태 ) 수행, 준비, 대기, 중단 등의 상황 정의 : 우선순위 : 스케줄링과 관련된 정보 ) 대기 시간, 마지막 수행 시간 등 : 이벤트 : 프로세스가 재시작될 수 있기 전 기다리고 있던 사건 -자료구조화 :프로세스는 큐나 링, 또는 다른 자료구조로 다른 프로세스와 연결이 될 수 있다 :이를 위해 프로세스 제어블록에는 다른 프로세스들을 가리키는 포인터를 포함할 수 있다 -프로세스 간 통신(IPC) :여러 플래그와 시그널, 메시지 등이 두 개의 독립된 프로세스 사이의 통신과 연관될 수 있다 : 이 정보의 전부 또는 일부가 프로세스 제어블록 내에 유지된다 -프로세스 권한 :프로세스는 접근할 수 있는 메모리 조건 및 수행할 수 있는 명령어 유형 등에 대한 어떤 권리를 가짐 :이 권한은 시스템 유틸리티와 서비스를 사용하는 경우에도 적용될 수 있다. -메모리 관리 :프로세스에 할당된 가상 메모리를 나타내는 세그먼트나 페이지 테이블로의 포인터를 가짐 -자원의 소유권과 이용률 :프로세스에 의해 제어되는 자원들은 개방된 파일처럼 표시될 수 있다 :처리기 및 자원들의 이용률에 대한 이력 정보도 포함될 수 있는데, 이 정보는 스케줄러에 의해 사용된다. |
-운영체제가 활성화 된 여러 프로세스들을 제어하고 조정하기 위해 필요한 추가 정보이다. |
(3) 프로세스 제어블록의 역할
-프로세스 제어블록에는 운영체제에게 필요한 프로세스의 모든 정보들이 들어있다.
-이 블록들은 스케줄링, 자원 할당, 인터럽트 처리, 성능 측정과 분석 등에 관련한 모듈들을 포함하여 운영체제의 모든 모듈에 의해 읽혀지고 수정될 수 있다.
-프로세스 제어블록의 집합은 운영체제의 상태를 정의한다고 말할 수 있다
-각 프로세스들은 유일한 ID를 가지고 있으므로 이를 프로세스 제어블록에 대한 포인터 테이블의 인덱스로 사용하여 직접 접근하는 것은 어렵지 않다
- 문제는 테이블에 대한 접근보다 보호
프로세스 제어블록의 자유로운 접근이 야기하는 두 가지 문제
-i) 인터럽트 핸들러와 같은 단일 루틴에서의 버그가 프로세스 제어블록에 손상을 줄 수 있고 관리 시스템이 파괴될 수도 있다
-ii) 프로세스 제어블록의 구조와 의미 부분의 설계가 변경되면 수많은 운영체제 모듈이 영향을 받음
[2-4] 프로세스 제어
1. 수행모드 (Modes of Execution)
(운영체제와 관련된 처리기의 수행 vs 사용자 프로그램과 관련된 처리시의 수행 모드) --> 구분 !
-권한을 얼마나 가지느냐에 따라 대부분의 처리기는 최소한 두 가지 수행모드를 지원한다
(1) 사용자 모드
: 권한을 덜 가진 모드
: 사용자 프로그램들이 일반적으로 이 모드에서 사용된다
(2) 시스템모드 (= 제어 모드, 커널 모드)
: 커널모드라고 하는 이유는 운영체제 커널(중요한 시스템 기능을 포함하는 운영체제의 일부)과 관련이 있기 때문이다
** 커널의 주요 기능
프로세스 관리 | -프로세스 생성과 종료 -프로세스 스케줄링과 디스패칭 -프로세스 교환 -프로세스 동기화롸 프로세스 간 통신 지원 -프로세스 제어블록 관리 |
메모리 관리 | -프로세스에 주소공간 할당 -스와핑 -페이지와 세그먼트 관리 |
입출력 관리 | -버퍼 관리 -프로세스에 입출력 채널과 장치 할당 |
지원 기능 | -인터럽트 핸들링 -어카운팅 -모니터링 |
-두 가지 모드를 사용하는 이유는 사용자 프로그램의 간섭으로부터 운영체제 및 프로세스 제어블록과 같은 주요 운영체제 테이블을 보호할 필요가 있기 때문이다
-커널 모드에서 수행되는 소프트웨어는 처리기와 보든 명령어들, 레지스터들, 그리고 메모리를 완전히 제어할 수 있음
-커널모드의 제어 수준은 사용자 프로그램의 경우 필요하지 않으며 안전을 위해서도 바람직하지 않다
-수행모드와 관련하여 발생할 수 있는 두 가지 문제
(1) 프로그램이 어떤 모드에서 수행되고 있는지 파악할 수 없음
: 프로그램 상태 워드의 한 비트를 사용하여 수행모드를 나타냄으로서 해결이 가능하다
: 그 비트는 특정 사건에 따라서 변한다
: 주로 사용자가 운영체제 서비스를 호출하거나 인터럽트가 운영체제의 한 경로의 수행을 촉발시킬 때 모드는 커널 모드
: 제어가 그 운영체제 서비스에서 사용자 프로세스로 복귀할 때 모드는 사용자 모드
(2) 모드 변경 문제
2. 프로세스 생성
- 운영체제가 어떤 이유로든 새로운 프로세스를 생성하기로 결정하였다면, 다음과 같은 순서로 진행이 될 것이다
1 | 새로운 프로세스에 유일한 프로세스 식별자를 할당한다 -이 때 새로운 항목이 주요 프로세스 테이블에 첨가된다 -주요 프로세스 테이블은 프로세스마다 하나의 항목을 유지한다 |
2 | 프로세스에 공간을 할당한다 -프로세스 이미지의 모든 요소들이 여기에 저장되므로, 운영체제는 사적인 사용자 주소공간, 사용자 스택을 위해 필요한 공간이 어느정도인지 알아야 한다 -이러한 닶들은 프로세스 타입에 따라 기본값이 할당될 수 있으나 작업 생성 시 사용자의 요구에 의해 결정될 수도 있다 -만약 프로세스가 다른 프로세스에 의해 생성된다면 보모 프로세스가 필요한 값들을 프로세스 생성 요청의 일부로서 운영체제에게 넘겨줄 수 있다 -ㅇ미 존재하는 주소공간이 새로 생성된 프로세스에 의해 공유된다면 적잘한 연결이 설정되어야 한다 -마지막으로 프로세스 제어블록을 위한 공간도 할당되어야 한다 |
3 | 프로세스 제어블록을 초기화한다 -프로세스 식별 부분에는 해당 프로세스의 ID 및 또 다른 ID (부모 ID) 등의 정보가 포함 -처리기 상태 정보 중에서는 프로그램 카운터와 시스템 스택 포인터를 제외하고 대부분의 항목들이 0으로 초기화된다 -프로세스 제어 정보는 표준 기본값과 스 프로세스를 위해 요청된 속성에 근거하여 초기화된다 |
4 | 적절한 연결(linkage)을 설정한다 -예를 들어 운영체제가 각 스케줄링 큐를 연결 리스트로 유지하고 있었다면 새로운 프로세스는 준비 또는 준비/보류 리스트에 놓아져야 함 |
5 | 다른 자료구조를 생성 또는 확장한다 -예를 들어 각 프로세스에 대해 과금이나 성능 평가 목적으로 사용될 어카운팅 파일을 유지할 수 있다 |
3. 프로세스 교환 (Process Switching)
- 수행 중인 프로세스가 어느 시점에 인터럽트되면, 운영체제는 다른 프로세스를 수행 상태로 바꾸고, 그 프로세스에게 제어를 넘겨준다
- 위와 같은 프로세스 교환과정을 설계 시 고려할 이슈
:프로세스 교환을 유발시키는 사건들에는 어떤 것들이 있는가
:모드 전환과 프로세스 교환의 차이는 무엇인가
:프로세스를 교환하기 위해서 운영체제 자신이 제어하는 여러 자료구조들을 어떻게 다룰 것인가
(1) 프로세스 교환 시점
- 운영체제가 현재 수행 중인 프로세스로부터 제어를 넘겨받을 때마다, 프로세스 교환 발생
** 프로세스 수행을 인터럽트하는 기법 ) 인터럽트, 트랩, 수퍼바이저 호출
-인터럽트 : 현재 수행 중인 프로세스와는 독립적으로 외부에서 유발되는 여러 종류의 사건에 의해 발생
-인터럽트 종류
클럭 인터럽트 | 현재 수행 중인 프로세스가 자신에게 허용된 최대 시간, 즉 시간 할당량을 모두 사용했는지 여부를 판단한다 시간 할당량은 프로세스가 중단 없이 실행될 수 있는 최대 시간량을 의미한다 만약 시간 할당량을 다 사용하였다면 시간 만료된 프로세스는 준비상태가 되고 다른 프로세스가 디스패치 된다 |
입출력 인터럽트 | 운영체제는 어떤 입출력 동작이 발생했는지 파악해야할 때가 있다 발생된 입출력 동작이 하나 이상의 프로세스가 대기하고 있던 사건과 관련이 있다면 운영체제는 그 사건에 대해 블록되어있던 모든 프로세스들을 준비 상태로 전이시킨다 그 다음 운영체제는 현재 수행 상태에 있는 프로세스의 수행을 재개할 것인지 더 높은 우선순위 프로세스를 위해 현재의 프로세스를 선점할 지 결정한다 |
메모리 폴트 | 메모리 부재 처리기가 주기억장치에 있지 않은 워드에 대한 가상메모리 주소 참조를 처리해야 할 때가 있다 이 때 보조기억장치로부터 주기억장치로 메모리블록을 가져와야 한다 |
-트랩 : 불법적인 파일 접근 시도처럼 현재 수행되고 있는 프로세스에서 생성되는 오류나 예외조건 때문에 발생
-트랩이 발생되면 운영체제는 관련 오류 또는 예외조건이 치명적인지 아닌지를 판단한다
-치명적이라면 현재 수행되고 있는 프로세스는 종료상태로 전이, 프로세스 교환이 일어난다
-치명적이지 않다면 오류의 특성과 운영체제 설계에 따라 운영체제는 어떤 복구 프로시저를 수행하는 등 서로 다르게 동작
-수퍼바이저 호출 : 운영체제 활성화
(2) 모드 전환 (Mode Switching)
-
'CS > 운영체제' 카테고리의 다른 글
3. 쓰레드 (2) (0) | 2024.01.23 |
---|---|
3. 쓰레드 (1) (0) | 2024.01.23 |
2. 프로세스 기술과 제어 (1) (0) | 2024.01.16 |
1. 운영체제 개요 (1) (0) | 2024.01.11 |