등산 수송 경제적인 스토브

프로세스 개념. 프로세스 관리 운영 체제 하위 시스템. 프로세스 상태. 컨텍스트 및 프로세스 핸들. 프로세스 관리 하위 시스템 메모리 관리 원칙

작업 관리 시스템은 컴퓨터를 통한 통과를 보장합니다. 프로세스 상태에 따라 하나 또는 다른 리소스를 할당해야 합니다. 예를 들어, 새로운 프로세스는 주소 공간을 할당하여 메모리에 배치해야 합니다. 프로세서 시간을 놓고 경쟁하는 작업 목록에 포함됩니다.

컴퓨터 기능에 직접적인 영향을 미치는 다중 프로그램 OS의 주요 하위 시스템 중 하나는 다음과 같습니다. 프로세스 및 스레드 관리 하위 시스템. 생성과 소멸을 처리하고 시스템에 동시에 존재하는 프로세스와 스레드 간에 프로세서 시간을 분배합니다.

여러 작업이 시스템에서 동시에 실행되는 경우 스레드가 비동기적으로 생성되고 실행되더라도 데이터 교환 등의 상호 작용이 필요할 수 있습니다. 따라서 스레드 동기화는 프로세스 및 스레드 관리 하위 시스템의 중요한 기능 중 하나입니다.

프로세스 간 통신은 공유 변수와 특수 기본 연산인 기초 요소.

프로세스 및 스레드 관리 하위 시스템에는 프로세스에 대해 다음 작업을 수행할 수 있는 기능이 있습니다.

– 프로세스 생성(생성)/파괴

– 프로세스를 일시 중지/재개합니다.

– 프로세스를 차단/깨우기;

– 프로세스를 시작합니다.

– 프로세스 우선순위 변경;

프로세스 및 스레드 관리 하위 시스템은 프로세스에 필요한 리소스를 제공하는 역할을 담당합니다. OS는 각 프로세스에 할당된 리소스를 기록하는 특별한 정보 구조를 메모리에 유지합니다. 단독으로 사용하거나 다른 프로세스와 공유하여 사용하기 위해 리소스를 프로세스에 할당할 수 있습니다. 일부 리소스는 프로세스가 생성될 때 프로세스에 할당되고 일부는 런타임 시 요청에 따라 동적으로 할당됩니다. 리소스는 전체 수명 동안 또는 특정 기간 동안만 프로세스에 할당될 수 있습니다. 이러한 기능을 수행할 때 프로세스 관리 하위 시스템은 메모리 관리 하위 시스템, 입력/출력 하위 시스템, 파일 시스템 등 리소스 관리를 담당하는 다른 OS 하위 시스템과 상호 작용합니다.

1. 프로세스와 스레드 생성 및 삭제

프로세스를 생성한다는 것은 무엇보다도 프로세스를 생성한다는 것을 의미합니다. 프로세스 핸들는 운영 체제가 프로세스를 관리하는 데 필요한 프로세스에 대한 모든 정보를 포함하는 하나 이상의 정보 구조입니다. 이 문제는 이전에 자세히 논의되었으므로 이제 이러한 정보에는 프로세스 식별자, 메모리 내 실행 모듈 위치에 대한 데이터, 프로세스 권한 수준(우선순위 및 액세스 권한) 등이 포함될 수 있다는 점만 기억해 보겠습니다. 등.

프로세스를 생성하려면 프로세스 실행 프로그램의 코드와 데이터를 디스크에서 RAM으로 로드해야 합니다. 이 경우 프로세스 관리 하위 시스템은 메모리 관리 하위 시스템 및 파일 시스템과 상호 작용합니다. 다중 스레드 시스템에서 프로세스가 생성되면 OS는 각 프로세스에 대해 적어도 하나의 실행 스레드를 생성합니다. 프로세스를 생성할 때와 마찬가지로 스레드를 생성할 때 OS는 스레드 식별자, 액세스 권한 및 우선 순위에 대한 데이터, 스레드 상태 등을 포함하는 스레드 설명자라는 특별한 정보 구조를 생성합니다. 일단 생성된 스레드(또는 프로세스)는 실행 준비 상태(또는 특수 목적 OS의 경우 유휴 상태)에 있습니다.

작업은 사용자 또는 다른 작업의 적절한 요청에 따라 생성 및 삭제됩니다. 작업은 새로운 작업을 생성할 수 있습니다. 많은 시스템에서 스레드는 소위 생성 요청을 통해 OS에 연결할 수 있습니다. 어린이 스트림. 생성 작업을 "상위" 또는 "상위"라고 하며, 자식 작업을 "후손" 또는 "자식 작업"이라고 합니다. "상위"는 하위 작업을 일시 중단하거나 삭제할 수 있지만 "하위"는 "상위"를 관리할 수 없습니다.

운영 체제에 따라 하위 스레드와 해당 상위 스레드 간의 관계가 다르게 구성됩니다. 일부 운영 체제에서는 해당 실행이 동기화됩니다(상위 스레드가 종료된 후 모든 하위 항목이 실행에서 제거됨). 다른 운영 체제에서는 하위 항목이 상위 스레드와 관련하여 비동기적으로 실행됩니다.

프로세스가 완료된 후 OS는 시스템에 존재하는 "추적을 정리"합니다. 즉, 프로세스가 작동했던 모든 파일을 닫고 프로세스의 코드, 데이터 및 시스템 정보 구조에 할당된 RAM 영역을 비웁니다. 종료되는 프로세스에 대한 참조가 포함된 OS 대기열 및 리소스 목록이 수정되었습니다.

2. 프로세스와 스레드 예약 및 디스패치

계획 전략은 목표를 달성하기 위해 어떤 프로세스를 실행하도록 선택하는지 결정합니다. 전략은 다를 수 있습니다. 예를 들면 다음과 같습니다.

– 가능하다면 계산을 시작한 순서대로 완료하십시오.

– 더 짧은 프로세스를 선호합니다.

– 모든 사용자(사용자 작업)에게 동일한 대기 시간을 포함하여 동일한 서비스를 제공합니다.

프로세스 수명 동안 해당 스레드의 실행이 여러 번 중단되고 계속될 수 있습니다.

한 스레드의 실행에서 다른 스레드로의 전환은 다음의 결과로 수행됩니다. 계획그리고 파견.

계획스레드는 프로세스 및 스레드 설명자에 저장된 정보를 기반으로 구현됩니다. 스케줄링 시 스레드의 우선순위, 대기열에서 대기하는 시간, 누적 실행 시간, I/O 액세스 강도 및 기타 요소를 고려할 수 있습니다. OS는 스레드가 동일한 프로세스에 속하는지 또는 다른 프로세스에 속하는지 여부에 관계없이 실행되도록 스레드를 예약합니다. 계획은 실행 중에 충돌을 최소화하고 컴퓨팅 시스템을 최대한 효율적으로 사용하도록 프로세스 집합을 선택하는 작업으로 이해됩니다.

다양한 정보 출처에는 다양한 해석"계획"과 "파견"의 개념입니다. 따라서 일부 저자는 계획을 장기(글로벌)와 단기(동적, 즉 현재 가장 효율적인 배포)로 나누고 후자를 파견이라고 합니다. 다른 출처에 따르면 파견은 계획 단계에서 내린 결정을 구현하는 것으로 이해됩니다. 우리는 이 옵션을 고수할 것입니다.

계획두 가지 문제를 해결하는 것이 포함됩니다.

활성 스레드를 변경하는 시점을 결정하는 단계;

준비된 스레드 대기열에서 실행할 스레드를 선택합니다.

이러한 문제를 다양한 방식으로 해결하는 많은 스케줄링 알고리즘이 있습니다. 운영 체제의 세부 사항을 결정하는 것은 계획 기능입니다. 조금 후에 살펴보겠습니다.

대부분의 운영 체제에서는 스케줄링이 수행됩니다. 동적으로, 즉. 현재 상황에 대한 분석을 바탕으로 업무 중에 결정이 내려집니다. 스레드와 프로세스는 임의의 시간에 나타나고 예기치 않게 종료됩니다.

공전스케줄링 유형은 동시에 실행되는 작업의 전체 집합이 미리 정의되어 있는 특수 시스템(실시간 시스템)에서 사용할 수 있습니다. 스케줄러는 작업 집합의 특성에 대한 지식을 기반으로 일정을 만듭니다. 그러면 이 일정은 운영 체제에서 일정을 잡는 데 사용됩니다.

파견계획의 결과로 찾은 솔루션을 구현하는 것으로 구성됩니다. 한 프로세스를 다른 프로세스로 전환할 때 파견은 다음과 같이 이루어집니다.

변경이 필요한 현재 스레드의 컨텍스트를 저장합니다.

실행을 위해 새 스레드를 시작합니다.

스레드 컨텍스트는 먼저 중단 당시 컴퓨터 하드웨어의 상태(프로그램 카운터 값, 레지스터 내용)를 반영합니다. 범용, 프로세서 작동 모드, 플래그, 인터럽트 마스크 및 기타 매개변수), 둘째, 운영 환경의 매개변수(열린 파일에 대한 링크, 완료되지 않은 I/O 작업에 대한 데이터, 특정 시스템 호출 스레드에서 수행되는 오류 코드 등)입니다.

스레드의 맥락에서 우리는 주어진 프로세스의 모든 스레드에 공통적인 부분(열린 파일에 대한 링크)과 주어진 스레드에만 관련된 부분(레지스터의 내용, 프로그램 카운터, 프로세서 모드). 예를 들어, NetWare 환경에는 전역 컨텍스트(프로세스 컨텍스트), 스레드 그룹 컨텍스트, 개별 스레드 컨텍스트라는 세 가지 유형의 컨텍스트가 있습니다. 이러한 컨텍스트의 데이터 간의 관계는 프로그램의 전역 변수와 지역 변수 간의 관계와 유사합니다. 컨텍스트의 계층적 구성은 스레드 전환 속도를 높입니다. 동일한 프로세스 내에서 한 그룹의 스레드에서 다른 그룹의 스레드로 전환할 때 전역 컨텍스트는 변경되지 않고 그룹 컨텍스트만 변경됩니다. 전역 컨텍스트 전환은 한 프로세스의 스레드에서 다른 프로세스의 스레드로 이동할 때만 발생합니다.

3. 알고리즘 계획

첫 번째 스케줄링 문제(활성 스레드를 변경하는 순간 선택)를 해결하는 관점에서 스케줄링 알고리즘은 선점형 알고리즘과 비선점형 알고리즘이라는 두 가지 큰 클래스로 나뉩니다.

비억압적– 활성 스레드는 대기열에서 다른 준비된 스레드를 선택하기 위해 자체적으로 제어를 시스템으로 전송할 때까지 실행할 수 있습니다.

변위– 운영 체제가 수행 중인 작업을 변경하기로 결정하고 프로세서를 다른 스레드로 전환합니다.

이러한 스케줄링 알고리즘 간의 주요 차이점은 스레드 스케줄링 메커니즘의 중앙 집중화 정도입니다. 각 알고리즘 클래스의 주요 특징, 장점 및 단점을 고려해 보겠습니다.

비선점형 알고리즘. OS로부터 제어를 받은 응용 프로그램은 자체적으로 다음 실행 주기가 완료되는 순간을 결정한 다음 일부 시스템 호출을 사용하여 제어를 OS로 전달합니다. 결과적으로, 임의의 기간 동안 애플리케이션에 대한 사용자 제어가 손실됩니다. 개발자는 이 점을 고려하여 "부분적으로" 작동하도록 애플리케이션을 생성해야 하며, 주기적으로 중단하고 시스템에 대한 제어권을 전송해야 합니다. 개발 중에는 스케줄러의 기능도 수행됩니다.

장점이 접근 방식은 다음과 같습니다.

- 불편한 순간에 흐름이 중단되는 경우는 제외됩니다.

– 데이터 동시 사용 문제가 해결되었습니다. 각 실행 주기 동안 작업은 해당 항목을 독점적으로 사용하며 다른 사람이 이를 변경할 수 없도록 합니다.

– 스트림에서 스트림으로 전환하는 속도가 더 빠릅니다.

단점프로그램 개발이 어렵고 프로그래머 자격에 대한 요구 사항이 증가했으며 실수로 또는 고의로 루프가 발생하는 경우 하나의 스레드가 프로세서를 대신할 가능성도 있습니다.

선제적 알고리즘– 운영 체제 자체가 활성 응용 프로그램을 중단할지 여부를 결정하고 하나 또는 다른 기준에 따라 프로세서를 한 작업에서 다른 작업으로 전환하는 순환 또는 순환 유형의 스케줄링입니다. 이러한 알고리즘을 갖춘 시스템에서 프로그래머는 자신의 응용 프로그램이 다른 작업과 동시에 실행될 것이라는 사실에 대해 걱정할 필요가 없습니다. 예로는 UNIX, Windows NT/2000, OS/2 운영 체제가 있습니다. 이 클래스의 알고리즘은 애플리케이션의 고성능 실행에 중점을 둡니다.

선점형 알고리즘은 양자화 개념이나 우선순위 메커니즘을 기반으로 할 수 있습니다.

양자화 기반 알고리즘. 각 스레드에는 제한된 연속 프로세서 시간 조각이 제공됩니다(해당 값은 1ms보다 작아서는 안 되며 일반적으로 수십 ms이어야 함). 퀀텀이 소진되면 스레드가 실행 상태에서 준비 상태로 이동됩니다. Quanta는 모든 흐름에 대해 동일할 수도 있고 다를 수도 있습니다.

스레드에 퀀텀을 할당할 때 다양한 원칙을 사용할 수 있습니다. 이러한 퀀텀은 고정된 값일 수도 있고 스레드 수명의 다양한 기간 동안 변경될 수도 있습니다. 예를 들어 일부 특정 흐름의 경우 첫 번째 퀀텀은 상당히 클 수 있으며 여기에 할당된 각 후속 퀀텀은 더 짧은 기간(지정된 제한으로 감소)을 가질 수 있습니다. 이는 더 짧은 스레드에 이점을 제공하고 장기 실행 작업은 배경 모드. 또 다른 원칙은 I/O 작업을 자주 수행하는 프로세스가 자신에게 할당된 시간 조각을 완전히 활용하지 못한다는 사실에 기초합니다. 이러한 불의를 보상하기 위해 다른 스레드에 대한 권한을 갖는 해당 프로세스로부터 별도의 대기열을 형성할 수 있습니다. 실행할 다음 스레드를 선택할 때 이 큐가 먼저 스캔되고 비어 있는 경우에만 실행할 준비가 된 일반 큐에서 스레드가 선택됩니다.

이러한 알고리즘은 작업에 대한 사전 정보를 사용하지 않습니다. 이 경우 서비스 차별화는 시스템 내 흐름의 '존재 이력'을 기반으로 합니다.

두 번째 스케줄링 문제(다음 스레드 실행을 선택하는 원칙)의 관점에서 알고리즘은 조건에 따라 비우선순위 알고리즘과 우선순위 알고리즘으로 분류될 수도 있습니다. 비우선순위 유지보수를 사용하면 상대적 중요성과 유지보수 시간을 고려하지 않고 사전에 결정된 특정 순서에 따라 다음 작업이 선택됩니다. 우선순위 규칙을 구현할 때 일부 작업에는 실행 상태로 들어가기 위한 우선순위가 부여됩니다.

이제 가장 일반적인 계획 분야 중 일부를 살펴보겠습니다.


선착순 서비스. 프로세서는 FIFO(선입선출) 원칙을 사용하여 할당됩니다. 서비스 요청이 접수된 순서대로. 이 접근 방식을 사용하면 "가능한 경우 나타나는 순서대로 계산을 완료"하는 전략을 구현할 수 있습니다. 실행 중에 차단된 작업은 준비 상태로 들어간 후 아직 실행되지 않은 작업 앞에 대기열에 추가됩니다. 따라서 두 개의 대기열이 생성됩니다. 하나는 아직 실행되지 않은 작업 중 하나이고 다른 하나는 보류 상태에서 전환된 작업입니다.

이 규율은 작업이 자발적으로 프로세서를 해제할 때 비선점적으로 구현됩니다.

위엄이 알고리즘은 구현하기 쉽습니다. 불리– 부하가 심한 경우 짧은 작업은 시스템에서 대기해야 합니다. 오랫동안. 다음 접근 방식은 이러한 단점을 제거합니다.

가장 짧은 프로세스가 먼저 제공됩니다.이 알고리즘에 따르면 작업을 완료하는 데 필요한 최소 예상 시간을 가진 스레드가 실행 다음에 할당됩니다. 여기에서는 완료되기까지 시간이 거의 남지 않은 스레드가 선호됩니다. 이렇게 하면 시스템에서 보류 중인 작업 수가 줄어듭니다. 불리예상 시간을 미리 알아야 하는데, 이것이 항상 가능한 것은 아닙니다. 대략적인 근사치로 어떤 경우에는 스레드가 마지막으로 제어를 수신하는 데 소비한 시간을 사용할 수 있습니다.

이 알고리즘은 비선점형, 우선순위가 없는 범주에 속합니다.

사용자가 시스템의 응답을 기대하지 않는 경우 명명된 알고리즘을 일괄 작동 모드에 사용할 수 있습니다. 대화형 컴퓨팅의 경우 무엇보다도 허용 가능한 응답 시간과 다중 터미널 시스템에 대한 동일한 서비스를 보장하는 것이 필요합니다. 단일 사용자 시스템의 경우 직접 작업하는 프로그램에는 다음이 있는 것이 바람직합니다. 최고의 시간백그라운드 작업보다 반응이 좋습니다. 또한 일부 응용 프로그램은 직접적인 사용자 상호 작용 없이 실행되는 동안에도 프로세서 시간 공유를 받을 수 있도록 보장되어야 합니다(예: 전자 메일 프로그램). 이러한 문제를 해결하기 위해 우선순위 서비스 방식과 양자화(Quantization) 개념이 사용된다.


회전목마 규율, 또는 회보R.R.(라운드 로빈). 이 분야는 선점형 알고리즘과 관련이 있으며 양자화를 기반으로 합니다. 각 작업은 프로세서 시간을 부분적으로 받습니다(양량). 시간 할당량이 끝나면 작업이 프로세서에서 제거되어 실행 준비가 된 프로세스 대기열의 끝에 배치되고 프로세서에서 서비스를 위해 다음 작업이 수락됩니다. 시스템의 최적 작동을 위해서는 작업에 시간 분할을 할당하는 법칙을 올바르게 선택하는 것이 필요합니다.

양자 값은 사용자 요청에 대해 허용 가능한 시스템 응답 시간(가장 간단한 요청으로 인해 오랜 대기 시간이 발생하지 않도록 함)과 자주 변경되는 작업의 오버헤드 비용 사이의 절충안으로 선택됩니다. 중단되면 OS는 현재 프로세스에 대해 충분히 많은 양의 정보를 저장하고, 취소된 작업의 핸들을 대기열에 넣고, 새 작업의 컨텍스트를 로드해야 합니다. 작은 시간 조각과 빈번한 전환으로 인해 이러한 오버헤드의 상대적인 점유율이 커지고 이로 인해 시스템 전체의 성능이 저하됩니다. 시간 조각이 크고 준비된 작업의 대기열이 증가하면 시스템 응답이 저하됩니다.

일부 운영 체제에서는 시간 조각 값이나 해당 값의 허용 범위를 명시적으로 지정할 수 있습니다. 예를 들어, OS/2에서 CONFIG.SYS 파일은 TIMESLICE 연산자를 사용하여 시간 조각의 최소값과 최대값을 지정합니다. TIMESLICE=32.256은 시간 조각을 32밀리초에서 256밀리초로 변경할 수 있음을 나타냅니다.

이 서비스 규율은 가장 일반적인 것 중 하나입니다. 어떤 경우에는 OS가 라운드 로빈 스케줄링 규칙을 명시적으로 지원하지 않는 경우 이러한 유지 관리가 인위적으로 구성될 수 있습니다. 예를 들어 일부 RTOS는 절대 우선순위가 있는 스케줄링을 사용하며 우선순위가 동일하면 큐잉 원칙이 적용됩니다. 즉, 우선 순위가 더 높은 작업만 실행에서 작업을 제거할 수 있습니다. 필요한 경우 서비스를 균등하고 동일하게 구성합니다. 모든 작업이 동일한 시간 분할을 받도록 하기 위해 시스템 운영자는 이러한 서비스를 직접 구현할 수 있습니다. 이렇게 하려면 모든 사용자 작업에 동일한 우선 순위를 할당하고 지정된 시간 간격으로 타이머 실행을 예약하는 것 외에는 아무 작업도 수행해서는 안 되는 하나의 높은 우선 순위 작업을 만드는 것으로 충분합니다. 이 작업은 현재 애플리케이션을 실행에서 제거하고 대기열의 끝으로 이동하며 작업 자체는 즉시 프로세서를 떠나 대기열의 다음 프로세스에 전달됩니다.

가장 간단한 구현에서 캐러셀 서비스 규율은 모든 작업이 동일한 우선순위를 갖는다고 가정합니다. 우선순위 서비스 메커니즘을 도입해야 하는 경우 일반적으로 우선순위에 따라 여러 개의 큐가 구성되며, 우선순위가 높은 큐가 비어 있는 경우에만 우선순위가 낮은 큐의 서비스가 수행됩니다. 이 알고리즘은 OS/2 및 Windows NT 시스템에서 일정을 예약하는 데 사용됩니다.

우선순위에 따른 계획.

많은 선점형 알고리즘의 기본이 되는 중요한 개념은 선점형 서비스입니다. 이러한 알고리즘은 흐름 설명자에 있는 정보(우선순위)를 사용합니다. 시스템마다 우선순위를 다르게 정의합니다. 일부 시스템에서는 가장 높은 우선순위 값이 숫자로 간주될 수 있습니다. 가장 높은 가치, 다른 경우에는 - 반대로, 최우선 순위 0으로 간주됩니다.

일반적으로 스레드의 우선순위는 스레드가 실행 중인 프로세스의 우선순위와 직접적인 관련이 있습니다. 프로세스 우선순위프로세스가 시스템 프로세스인지 애플리케이션 프로세스인지, 프로세스를 시작한 사용자의 상태, 특정 우선순위를 할당하라는 명시적인 사용자 지시가 있었는지 여부를 고려하여 생성 시 운영 체제에 의해 할당됩니다. 프로세스에. 우선순위 값은 프로세스 핸들에 포함되며 해당 스레드에 우선순위를 할당할 때 사용됩니다. 스레드가 사용자 명령에 의해 시작되지 않고 다른 스레드가 시스템 호출을 실행한 결과로 시작되는 경우 OS는 시스템 호출의 매개변수를 고려하여 우선순위를 할당해야 합니다.

앞서 설명한 알고리즘에 따라 프로그램 유지 관리를 계획할 때 시스템(특히 RTOS)의 부하 증가로 인해 일부 제어 또는 관리 작업을 장기간 구현하지 못하는 상황이 발생할 수 있습니다. 더욱이, 그러한 작업을 시기 적절하게 완료하지 못하여 발생하는 결과는 우선 순위가 더 높은 일부 프로그램을 완료하지 못하여 발생하는 결과보다 더 심각할 수 있습니다. 이 경우 "긴급" 작업(처리 시간이 만료된 작업)의 우선 순위를 일시적으로 변경하고 실행 후 이전 값을 복원하는 것이 좋습니다. 동적으로 우선순위를 변경하는 메커니즘을 도입하면 짧은 사용자 요청(대화형 작업 중에 중요)에 대해 더 빠른 시스템 응답을 구현할 수 있게 되면서 동시에 모든 요청의 이행도 보장됩니다.

따라서 우선순위는 공전(고정) 또는 동적(상황에 따라 시스템 변경). 소위 기본 스레드 우선순위이를 생성한 프로세스의 기본 우선순위에 직접적으로 의존합니다. 어떤 경우에는 시스템이 스레드의 우선순위를 (다양한 수준으로) 높일 수 있습니다. 예를 들어 스레드에 할당된 프로세서 타임 슬라이스가 완전히 사용되지 않은 경우 또는 그렇지 않은 경우 우선순위를 낮출 수 있습니다. 예를 들어, OS는 키보드 입력을 기다리는 스레드에 더 많은 우선 순위를 부여하고 디스크 작업을 수행하는 스레드에는 더 적은 우선 순위를 부여합니다. 동적 우선순위 메커니즘을 사용하는 일부 시스템에서는 기본 우선순위 값, 컴퓨터 시스템의 로드 정도, 사용자가 지정한 초기 우선순위 값 등을 포함하는 다소 복잡한 공식을 사용하여 우선순위를 변경합니다. .

우선순위 스케줄링에는 두 가지 유형이 있습니다. 상대적인 우선순위로그리고 서비스 절대적 우선순위로. 두 경우 모두 실행할 스레드 선택은 동일한 방식으로 수행됩니다. 우선 순위가 가장 높은 스레드가 선택되고 활성 스레드를 변경하는 순간이 다르게 결정됩니다. 상대적 우선순위 시스템에서 활성 스레드는 프로세서를 떠날 때까지(대기하거나, 오류가 발생하거나, 스레드가 종료될 때까지) 실행됩니다. 절대 우선 순위가 있는 시스템에서는 표시된 이유 외에도 활성 스레드보다 우선 순위가 높은 스레드가 준비된 스레드 대기열에 나타나는 경우에도 활성 스레드의 중단이 발생합니다. 그런 다음 실행 중인 스레드가 중단되고 준비 상태가 됩니다.

상대적 우선순위 스케줄링을 사용하는 시스템은 전환 비용을 최소화하지만 단일 작업이 오랫동안 프로세서를 차지할 수 있습니다. 이 서비스 모드는 시분할 및 실시간 시스템에는 적합하지 않지만 배치 처리 시스템(예: OS/360)에서는 널리 사용됩니다. 절대 우선순위 스케줄링은 이벤트에 대한 신속한 대응이 중요한 시설 관리 시스템에 적합합니다.

혼합계획형많은 운영 체제에서 사용됩니다. 우선 순위 기반 스케줄링 알고리즘은 양자화 개념과 결합됩니다.

훈련 운영 체제 모듈의 개발

지침

해당 분야의 코스 설계를 위한

"OS"

학생들을 위한 일일 양식훈련

지도

소개 4

1. 이론 섹션. 4

1.1. 프로세스 제어 하위 시스템. 4

1.1.1. 컨텍스트 및 프로세스 핸들. 5

1.1.2. 프로세스 계획 알고리즘. 6

1.1.3. 선점형 및 비선점형 스케줄링 알고리즘. 9

1.1.4. 교육 운영 체제의 프로세스 관리 하위 시스템의 프로세스 모델 및 기능 12

1.2. 메모리 관리 하위 시스템.. 17

1.2.1. 페이지 배포. 18

1.2.2. 세그먼트 배포. 22

1.2.3. 페이지 세그먼트 배포. 23

1.2.4. 페이지 교체 알고리즘. 24

1.3. 파일 관리. 서른

1.3.1. 파일 이름. 서른

1.3.2. 파일 형식. 32

1.3.3. 물리적 구성 및 파일 주소. 33

2. 코스 프로젝트 완료 절차. 38

3. 작업 옵션. 39

참고문헌 42

부록 A...43

소개

과정 프로젝트의 목적: 운영 체제 모듈 구성의 이론적 기초를 연구합니다. 운영 체제의 일부인 프로그램 개발에 대한 실용적인 기술을 습득합니다.

이론적인 부분

독립 실행형 컴퓨터 운영 체제의 기능은 일반적으로 OS가 관리하는 로컬 리소스 유형이나 모든 리소스에 적용되는 특정 작업에 따라 그룹화됩니다. 때때로 이러한 기능 그룹을 하위 시스템이라고 합니다. 가장 중요한 하위 시스템은 프로세스, 메모리, 파일 및 외부 장치 관리 하위 시스템이며 모든 리소스에 공통적인 하위 시스템은 사용자 인터페이스, 데이터 보호 및 관리 하위 시스템입니다.

프로세스 제어 하위 시스템

컴퓨터 기능에 직접적인 영향을 미치는 운영 체제의 가장 중요한 부분은 프로세스 제어 하위 시스템입니다. 새로 생성된 각 프로세스에 대해 OS는 컴퓨터 시스템 리소스에 대한 프로세스 요구 사항과 실제로 할당된 리소스에 대한 데이터가 포함된 시스템 정보 구조를 생성합니다. 따라서 프로세스는 시스템 자원을 소비하는 일부 애플리케이션으로 정의될 수도 있습니다.

프로세스가 실행되려면 운영 체제는 프로세스 코드와 데이터가 위치할 RAM 영역을 할당하고 다음을 제공해야 합니다. 필요한 금액 CPU 시간. 또한 프로세스는 파일 및 I/O 장치와 같은 리소스에 액세스해야 할 수도 있습니다.

멀티태스킹 시스템에서 프로세스는 세 가지 주요 상태 중 하나일 수 있습니다.

RUNNING - 프로세스가 필요한 모든 리소스를 가지며 프로세서에 의해 직접 실행되는 프로세스의 활성 상태입니다.

WAITING은 프로세스의 수동적 상태입니다. 프로세스가 차단되어 자체 내부 이유로 실행할 수 없습니다. I/O 작업 완료, 다른 프로세스로부터 메시지 수신 등 일부 이벤트가 발생하기를 기다리고 있습니다. , 또는 필요한 일부 리소스의 출시;

READY는 프로세스의 수동적 상태이기도 하지만 이 경우 프로세스는 외부 상황으로 인해 차단됩니다. 즉, 프로세스에 필요한 모든 리소스가 있고 실행할 준비가 되어 있지만 프로세서는 다른 프로세스를 실행 중입니다.

수명주기 동안 각 프로세스는 주어진 운영 체제에 구현된 프로세스 스케줄링 알고리즘에 따라 한 상태에서 다른 상태로 이동합니다. 일반적인 프로세스 상태 그래프는 그림 1.1에 나와 있습니다.

그림 1.1 - 멀티태스킹 환경의 프로세스 상태 그래프

단일 프로세서 시스템에서는 RUNNING 상태에 하나의 프로세스만 있을 수 있고 WAITING 및 READY 상태에는 여러 프로세스가 있을 수 있습니다. 이러한 프로세스는 각각 대기 및 준비 프로세스의 대기열을 형성합니다.

수명주기프로세스는 실행 준비가 되어 차례를 기다리는 READY 상태로 시작됩니다. 활성화되면 프로세스는 RUNNING 상태로 들어가 프로세서 자체를 해제하거나 일부 이벤트에 대해 WAITING 상태로 들어가거나 프로세서 시간 소진 등으로 인해 프로세서에서 강제로 제거될 때까지 그 상태를 유지합니다. 이 프로세스에 할당된 양자입니다. 후자의 경우 프로세스는 READY 상태로 돌아갑니다. 예상되는 이벤트가 발생한 후 프로세스는 WAITING 상태에서 이 상태로 전환됩니다.

읽어야 할 기사:

프로그래밍의 기초. 공정 관리

컴퓨터 기능에 직접적인 영향을 미치는 최신 다중 프로그램 OS의 주요 하위 시스템 중 하나는 프로세스 및 스레드 관리 하위 시스템입니다. 이 하위 시스템의 주요 기능:

    프로세스 및 스레드 생성;

    프로세스와 스레드에 필요한 리소스를 제공합니다.

    프로세스 격리;

    프로세스 및 스레드 실행 예약(일반적으로 작업 예약에 대해서도 이야기해야 함)

    스레드 파견;

    프로세스 간 상호 작용의 조직;

    프로세스와 스레드의 동기화;

    프로세스와 스레드의 종료 및 파괴.

1. 다섯 가지 주요 이벤트가 프로세스 생성으로 이어집니다.

    실행 중인 프로세스의 요청을 이행하여 프로세스를 생성합니다.

    대화형으로 로그온할 때와 같이 프로세스를 생성하라는 사용자 요청;

    일괄 작업을 시작합니다.

    서비스 운영에 필요한 프로세스를 운영 체제에서 생성합니다.

일반적으로 OS가 부팅되면 여러 프로세스가 생성됩니다. 그 중 일부는 사용자와 상호 작용하고 할당된 작업을 수행하는 우선 순위가 높은 프로세스입니다. 나머지 프로세스는 백그라운드 프로세스로, 특정 사용자와 연결되지 않지만 이메일, 웹 페이지, 출력과 관련된 특수 기능을 수행합니다. 밀봉하다, 파일 전송 에 의해네트워크, 정기적인 프로그램 실행(예: 디스크 조각 모음) 등. 백그라운드 프로세스를 데몬이라고 합니다.

새로운 프로세스를 생성할 수 있습니다. 에 의해현재 프로세스의 요청입니다. 새로운 프로세스를 생성하는 것은 수행 중인 작업이 관련되어 있지만 그럼에도 불구하고 독립적인 상호 작용 프로세스 집합으로 가장 쉽게 형성될 수 있는 경우에 유용합니다. 대화형 시스템에서 사용자키보드에서 명령을 입력하거나 프로그램 아이콘을 두 번 클릭하여 프로그램을 시작할 수 있습니다. 두 경우 모두 새로운 프로세스가 생성되고 시작하다그 안에 프로그램이 있어요. 안에 일괄 처리 시스템메인프레임에서 사용자는 작업을 제출하고(원격 액세스 사용 가능) OS는 새 프로세스를 생성하고 필요한 리소스가 해제되면 대기열에서 다음 작업을 시작합니다.

2. 기술적인 관점에서 볼 때, 이 모든 경우에 새로운 프로세스는 동일한 방식으로 형성됩니다. 즉, 현재 프로세스가 시스템을 실행합니다. 요구새로운 프로세스를 생성합니다. 프로세스 및 스레드 관리 하위 시스템은 프로세스에 필요한 리소스를 제공하는 역할을 담당합니다.. OS는 각 프로세스에 할당된 리소스를 기록하는 특별한 정보 구조를 메모리에 유지합니다. 단독으로 사용하거나 다른 프로세스와 공유하여 사용하기 위해 프로세스에 리소스를 할당할 수 있습니다. 일부 리소스는 프로세스가 생성될 때 프로세스에 할당되고 일부는 동적으로 할당됩니다. 에 의해문의사항 리드타임. 리소스는 전체 수명 동안 또는 특정 기간 동안만 프로세스에 할당될 수 있습니다. 이러한 기능을 수행할 때 프로세스 제어 하위 시스템은 다음을 담당하는 다른 OS 하위 시스템과 상호 작용합니다. 자원 관리, 메모리 관리 하위 시스템과 같은 입력/출력 하위 시스템, 파일 시스템.

3. 프로세스가 방해받지 않도록 하기 위해 자원 할당, 또한 서로의 코드와 데이터를 손상시킬 수 없습니다. OS의 가장 중요한 작업은 한 프로세스를 다른 프로세스와 분리하는 것입니다.. 이를 위해 운영 체제어떤 프로세스도 다른 프로세스의 명령과 데이터에 직접 액세스할 수 없도록 각 프로세스에 별도의 가상 주소 공간을 제공합니다.

4. 프로세스와 스레드가 존재하는 OS에서 프로세스는 하나의 프로세서 시간을 제외한 모든 유형의 리소스를 소비하라는 요청으로 간주됩니다. 이 가장 중요한 자원운영 체제에 의해 다른 작업 단위(스레드) 사이에 배포됩니다. 이 스레드는 명령의 시퀀스(실행 스레드)를 나타내기 때문에 이름이 붙여졌습니다. 한 스레드의 실행에서 다른 스레드로의 전환은 다음의 결과로 수행됩니다.계획 그리고파견 . 직업 에 의해현재 스레드가 중단되어야 하는 순간과 실행이 허용되어야 하는 스레드를 결정하는 것을 스케줄링이라고 합니다. 스레드 스케줄링은 프로세스 및 스레드 설명자에 저장된 정보를 기반으로 수행됩니다.계획할 때 고려됩니다. 스레드 우선순위, 대기열의 대기 시간이 누적되었습니다. 리드타임, I/O 액세스 강도 및 기타 요인.

5. 파견은 계획의 결과로 발견된 솔루션을 구현하는 것으로 구성됩니다. 프로세서를 한 스레드에서 다른 스레드로 전환할 때. 파견은 세 단계로 이루어집니다.

    현재 스레드의 컨텍스트를 저장합니다.

    실행을 위해 새 스레드를 시작합니다.

6. 시스템이 여러 개의 독립적인 작업을 동시에 실행하면 추가적인 문제가 발생합니다. 스레드가 동기적으로 발생하고 실행되더라도 상호 작용이 필요할 수 있습니다., 예를 들어 데이터를 교환할 때입니다. 서로 통신하기 위해 프로세스와 스레드는 다음과 같은 광범위한 기능을 사용할 수 있습니다. 유닉스), 사서함( 윈도우), 원격 프로시저 호출, 소켓(에서 윈도우다른 컴퓨터의 프로세스를 연결합니다. 스레드 속도 일치는 경쟁 조건(여러 스레드가 동일한 값을 변경하려고 시도하는 경우)을 방지하는 데에도 매우 중요합니다. 파일), 교착 상태 및 리소스를 공유할 때 발생하는 기타 충돌이 발생합니다.

7. 동기화 스레드는 프로세스 및 스레드 관리 하위 시스템의 가장 중요한 기능 중 하나입니다.최신 운영 체제는 세마포어, 뮤텍스, 중요 영역 및 이벤트를 포함한 다양한 동기화 메커니즘을 제공합니다. 이 모든 것 메커니즘프로세스가 아닌 스레드로 작업합니다. 그렇기 때문에 언제 흐름세마포어 블록이 없어도 이 프로세스의 다른 스레드는 계속 실행될 수 있습니다.

8. 프로세스가 종료될 때마다, – 이는 다음 이벤트 중 하나로 인해 발생합니다. 출구, 출구 에 의해실수, 출구 에 의해치명적인 오류, 다른 프로세스에 의한 파괴 - OS는 시스템에 존재하는 "흔적을 정리"하는 조치를 취합니다. 프로세스 관리 하위 시스템은 프로세스가 작동하는 모든 파일을 닫고 프로세스의 코드, 데이터 및 시스템 정보 구조에 할당된 RAM 영역을 확보합니다. 수행됨 보정모든 종류의 OS 대기열 및 목록종료되는 프로세스에 대한 링크가 포함된 리소스.

프로세스 제어 하위 시스템

실행을 위해 시작된 프로그램은 하나 이상의 프로세스(또는 작업). 프로세스 제어 하위 시스템은 다음을 제어합니다.

프로세스 생성 및 삭제

프로세스 간 시스템 자원(메모리, 컴퓨팅 자원) 분배

프로세스 동기화

프로세스 간 통신

분명히 일반적으로 활성 프로세스의 수는 컴퓨터의 프로세서 수를 초과하지만 특정 시간에 각 프로세서에서는 하나의 프로세스만 실행할 수 있습니다. 운영 체제는 컴퓨팅 리소스에 대한 프로세스의 액세스를 관리하여 동시에 멀티태스킹이라는 느낌을 줍니다.

라는 특수 커널 작업 관리자또는 입안자프로세스(스케줄러)는 시스템 리소스(프로세서, 메모리, 입/출력 장치)를 놓고 경쟁하는 프로세스 간의 충돌을 해결합니다. 스케줄러는 실행 프로세스를 시작하여 프로세스가 공유 시스템 리소스를 독점적으로 차지하지 않도록 합니다. 프로세스는 긴 I/O 작업을 기다리는 동안 또는 일정 시간이 지난 후에 프로세서를 해제합니다. 이 경우 스케줄러는 다음으로 우선순위가 높은 프로세스를 선택하고 실행을 시작합니다.

메모리 관리 모듈애플리케이션 작업을 위한 RAM 배치를 제공합니다. RAM은 값비싼 리소스이며 일반적으로 RAM이 "너무 많은" 경우는 거의 없습니다. 모든 프로세스에 대한 메모리가 충분하지 않으면 커널은 프로세스의 일부 또는 여러 프로세스를 보조 메모리(보통 특수 영역)로 이동합니다. 하드 드라이브), 실행 중인 프로세스를 위한 리소스를 확보합니다. 모두 현대 시스템소위 구현 가상 메모리: 프로세스는 사용 가능한 실제 메모리보다 훨씬 클 수 있는 자체 논리 주소 공간에서 실행됩니다. 프로세스의 가상 메모리 관리도 메모리 관리 모듈의 책임입니다.

프로세스 간 통신 모듈신호를 사용하여 이벤트에 대해 프로세스에 알리고 다른 프로세스 간에 데이터를 전송하는 기능을 제공하는 역할을 담당합니다.

이 텍스트는 소개 부분입니다. Microsoft Windows의 내부 구조(Ch. 8-11) 책에서 발췌 작가 루시노비치 마크

UNIX 운영 체제 아키텍처 책에서 저자 바흐 모리스 J

10장. I/O 관리 하위 시스템 I/O 관리 하위 시스템을 사용하면 프로세스가 디스크 및 테이프 드라이브, 터미널, 프린터, 네트워크와 같은 주변 장치 및 커널 모듈과 통신할 수 있습니다.

DIY Linux 서버 책에서 작가

5.1.1. 일반적인 프로세스 관리 방식 각 프로세스는 fork()를 사용하여 완전히 동일한 프로세스를 생성할 수 있습니다. 상위 프로세스는 wait 시스템 호출을 사용하여 모든 하위 프로세스의 실행이 완료될 때까지 기다릴 수 있습니다. 그 과정은 언제든지

AS/400 기본 책에서 솔티스 프랭크

5.3. 프로세스 제어 명령 ps 명령 ps 명령은 현재 실행 중인 프로세스에 대한 정보를 표시하도록 설계되었습니다. 이 명령에는 매뉴얼(man ps)에서 읽을 수 있는 많은 매개변수가 있습니다. 여기서는 가장 일반적으로 사용되는 것만 설명하겠습니다.

프로그래밍 루비 [언어 이데올로기, 응용 이론 및 실습] 책에서 풀턴 할

메모리 하위 시스템 정보 프로세서의 가장 큰 문제 중 하나는 프로세서를 계속 로드하는 것입니다. 프로세서 성능은 지난 몇 년 동안 엄청나게 증가하여 평균 2년마다 두 배씩 증가했습니다. 메모리 및 I/O 성능이 따라잡을 수 없음

리눅스 책에서: 완전한 가이드 작가 콜리스니첸코 데니스 니콜라예비치

프로세스 관리 시간은 자연이 모든 일이 동시에 일어나는 것을 방지하는 수단입니다. 컴퓨터에서는 프로세스가 그러한 수단으로 사용됩니다. 프로세스는 실행 중인 프로그램입니다. 실행 가능한 프로그램, 프로그램 데이터 및 일부 정보로 구성됩니다.

Linux용 프로그래밍 책에서 발췌. 전문적인 접근 방식 미첼 마크

14.1.3. 프로세스 조작 이 섹션에서는 프로세스 조작에 대해 설명합니다. 하지만 새 프로세스를 만드는 데 반드시 외부 프로그램을 실행해야 하는 것은 아닙니다. 새로운 프로세스를 생성하는 주요 방법은 포크(fork) 방법이며, 그 이름은 다음과 같습니다.

UNIX 운영 체제 책에서 작가 Robachevsky 안드레이 M.

9.2. 프로세스 제어 명령 9.2.1. 프로세스 계층: ps 및 pstree ps 명령을 사용하면 현재 시스템에서 실행 중인 모든 프로세스에 대한 정보를 볼 수 있다는 것을 이미 알고 있습니다(섹션 3.2). -f 스위치를 사용하면 이 명령은 프로세스 자체의 PID와 해당 상위 프로세스의 PPID를 모두 표시합니다.

작가의 책에서

3.1. 프로세스 숙지 프로세스 실행을 시작하려면 사용자가 시스템에 로그인하기만 하면 됩니다. 사용자가 아무것도 실행하지 않고 화면 앞에 앉아서 커피를 마신다고 해도 말이죠. 시스템에는 아직 희미한 생명력이 남아있습니다. 실행 중인 모든 프로그램

작가의 책에서

파일 하위 시스템 파일 하위 시스템은 디스크 드라이브 및 주변 장치에 있는 데이터에 액세스하기 위한 통합 인터페이스를 제공합니다. 동일한 함수 open(2), read(2), write(2)를 디스크에 데이터를 읽거나 쓸 때 사용할 수 있습니다.

작가의 책에서

입/출력 하위 시스템 I/O 하위 시스템은 주변 장치(디스크, 테이프, 터미널 등)에 액세스하기 위해 파일 하위 시스템 및 프로세스 제어 하위 시스템의 요청을 수행합니다. 필요한 데이터 버퍼링과

작가의 책에서

작가의 책에서

3장 프로세스 관리 하위 시스템 UNIX 운영 체제의 핵심은 프로세스 관리 하위 시스템입니다. 거의 모든 커널 작업은 시스템 호출 서비스, 신호 생성, 메모리 할당, 처리 등 프로세스와 관련되어 있습니다.

작가의 책에서

4장 파일 하위 시스템 UNIX 운영 체제의 대부분의 데이터는 파일에 저장되고 트리로 구성되며 일부 저장 매체에 위치합니다. 일반적으로 이는 로컬(예: 운영 체제 자체와 동일한 컴퓨터에 위치) 하드입니다.

작가의 책에서

5장 I/O 하위 시스템 실제 I/O 아키텍처는 여러 인터페이스에 의해 애플리케이션 프로세스에서 숨겨져 있습니다. 그 중 하나인 파일 시스템 인터페이스는 이전 장에서 논의되었습니다. 원격 리소스와의 상호 작용은 네트워크를 통해 제공됩니다.

작가의 책에서

STREAMS 하위 시스템 STREAMS 하위 시스템의 아키텍처는 1984년 Ritchie, D.M., "A Stream Input-Output System," AT&T Bell Laboratories Technical Journal, Vol. 63, No. 8, Oct. 1984)에서 처음 설명되었습니다. 2년 후 이 시스템이 시행되었습니다.

UNIX 운영 체제의 핵심은 프로세스 관리 하위 시스템입니다. 시스템 호출 서비스, 신호 생성, 메모리 할당, 프로세스 실행으로 인한 예외 처리, 애플리케이션 프로세스에서 요청한 I/O 서비스 제공 등 거의 모든 커널 활동은 프로세스와 관련되어 있습니다.
운영 체제의 모든 기능은 궁극적으로 특정 프로세스의 실행에 의해 결정됩니다. 시스템 실행 수준이 실행 중인 프로세스 그룹을 정의하는 편리한 형태에 지나지 않는 것과 같습니다. 시스템에 대한 터미널 또는 네트워크 액세스 기능, UNIX의 다양한 기존 서비스(인쇄 시스템, 원격 FTP 아카이브, 이메일 및 기자 회견 시스템)는 모두 특정 프로세스의 결과입니다. UNIX의 프로세스는 본질적으로 시스템의 가장 중요한 두 가지 리소스인 프로세서와 RAM에 연결되어 있습니다. 일반적으로 이러한 리소스는 "많은" 수 없으며 운영 체제에서는 프로세서와 메모리를 소유할 권리를 두고 활발한 경쟁이 벌어지고 있습니다. 그리고 UNIX는 범용 멀티태스킹 시스템이기 때문에 이 리소스를 다양한 클래스와 요구 사항이 다른 작업에 공평하게 분배하는 작업은 쉽지 않습니다.
실행을 위해 시작된 프로그램은 하나 이상의 생성을 생성하므로
프로세스(또는 작업). 프로세스 제어 하위 시스템은 다음을 제어합니다.
  • 프로세스 생성 및 삭제
  • 프로세스 간 시스템 자원(메모리, 컴퓨팅 자원) 분배
  • 프로세스 동기화
  • 프로세스 간 통신
일반적인 경우 활성 프로세스의 수가 컴퓨터 프로세서의 수를 초과한다는 것은 명백합니다.
그러나 주어진 시간에 각 프로세서에서는 하나의 프로세스만 실행될 수 있습니다. 운영 체제는 컴퓨팅 리소스에 대한 프로세스의 액세스를 제어합니다.
멀티 태스킹의 느낌을 만듭니다. 프로세스 스케줄러라고 하는 특수 커널 작업은 시스템 리소스(CPU, 메모리, I/O 장치)를 놓고 경쟁하는 프로세스 간의 충돌을 해결합니다. 스케줄러는 실행 프로세스를 시작하여 프로세스가 공유 시스템 리소스를 독점적으로 차지하지 않도록 합니다. 프로세스는 긴 I/O 작업을 기다리는 동안 또는 이후에 프로세서를 해제합니다.시간의 양. 이 경우 스케줄러는 다음으로 높은 우선순위 프로세스를 선택하고 시작합니다.실행을 위한 것입니다.

메모리 관리 모듈 응용 프로그램 작업에 RAM 할당을 제공합니다. 모든 프로세스에 메모리가 충분하지 않으면 커널이 프로세스의 일부를 이동합니다.
또는 여러 프로세스를 보조 메모리(일반적으로 하드 드라이브의 특수 영역)에 저장하여 실행 중인 프로세스를 위한 리소스를 확보합니다.

모든 최신 시스템은 가상 메모리라는 것을 구현합니다. 프로세스는 사용 가능한 실제 메모리보다 훨씬 클 수 있는 자체 논리 주소 공간에서 실행됩니다. 프로세스의 가상 메모리 관리도 메모리 관리 모듈의 책임입니다.
프로세스 간 통신 모듈 신호를 사용하여 이벤트에 대해 프로세스에 알리고 다른 프로세스 간에 데이터를 전송하는 기능을 제공하는 역할을 담당합니다.

프로세스 제어 기본 사항

UNIX 프로세스는 컴파일 결과로 얻은 실행 파일의 메모리 매핑을 포함하는 프로그램의 실행 가능한 이미지입니다. o 프로그램 모듈, 고급 언어가 해당 언어의 동등한 프로그램 모듈로 번역되어 있습니다.낮은 수준은 다음과 같습니다.스택, 라이브러리 코드 및 데이터뿐만 아니라 프로세스를 제어하는 ​​데 필요한 수많은 커널 데이터 구조. 중요한 점프로세스의 "경쟁"에서 가장 중요한 자원 중 하나인 메모리 분배의 원리에 대한 추가 이해를 위해, 즉 데이터는 전통적으로 다음과 같이 구성됩니다.
  • 스택(현재부터 ) - 프로그램이 호출된 함수, 해당 인수 및 함수의 각 지역 변수에 대한 정보를 저장하는 메모리 영역입니다. 프로그램이 실행되면서 영역의 크기가 변경될 수 있습니다. 함수가 호출되면 스택이 증가하고, 완료되면 감소합니다.
  • 힙(가르치기 위해 )은 프로그램이 원하는 것은 무엇이든 할 수 있는 메모리 영역입니다. 면적의 크기는 다를 수 있습니다. 프로그래머는 malloc() 함수를 사용하여 힙 메모리의 일부를 사용할 수 있으며, 그러면 이 메모리 영역이 늘어납니다. 리소스는 free() 를 사용하여 반환된 후 힙이 줄어듭니다.
  • 코드(코드 세그먼트로 )은 컴파일된 프로그램의 기계어 명령어가 저장되는 메모리 영역이다. 컴파일러에 의해 생성되지만 수동으로 작성할 수도 있습니다. 이 메모리 영역은 세 부분(텍스트, 데이터 및 BSS)으로 나눌 수도 있습니다. 이 메모리 영역은 컴파일러에 의해 결정되는 고정된 크기를 갖습니다.유닉스. 전문 프로그래밍 기술 259

이는 무엇보다도 세그먼트와 페이지의 출현(존재)을 미리 결정합니다. 프로세스는 실행 중에 메모리, 프로세서, 파일 하위 시스템 서비스, 입/출력 하위 시스템 서비스 등 다양한 시스템 리소스를 사용합니다. 현대 컴퓨팅 시스템의 가혹한 진실은 하나의 프로세서가 단위 시간당 하나의 프로세스만 서비스할 수 있다는 것입니다.이를 통해 "기획자"의 출현(존재)UNIX 운영 체제는 활성 프로세스 사이에 시스템 자원을 효율적으로 분배하는 동시에 프로세스 중 어느 하나가 해당 자원의 사용을 독점하는 것을 방지함으로써 동시에 실행되는 여러 프로세스의 환상을 제공합니다.

새로운 UNIX 운영 체제는 PDP-7에 연결된 각 터미널에 대해 하나씩, 두 개의 프로세스만 실행하도록 제공했습니다. 1년 후, 동일한 PDP-7에서 프로세스 수가 눈에 띄게 증가하고 시스템 호출이 나타났습니다. 포크. UNIX의 첫 번째 버전에서는 호출이 도입되었습니다. 비용, 그러나 운영 체제는 여전히 한 번에 하나의 프로세스만 메모리에 배치할 수 있도록 허용했습니다. PDP-11에 하드웨어 메모리 관리 하위 시스템을 구현함으로써 운영 체제는 여러 프로세스를 한 번에 메모리에 로드할 수 있도록 수정되었으며, 이를 통해 프로세스 이미지를 보조 메모리(디스크)에 저장하는 데 걸리는 시간이 단축되었습니다. 프로세스가 계속 실행될 때 읽어보세요. 그러나 1972년까지 UNIX는 I/O 작업이 동기식으로 유지되고 "동료"가 I/O 작업을 완료할 때까지 다른 프로세스를 실행할 수 없었기 때문에 진정한 멀티태스킹 시스템이라고 부를 수 없었습니다. 진정한 멀티태스킹은 1973년에 UNIX 코드가 C로 다시 작성되었을 때만 가능해졌습니다. 그 이후로 프로세스 관리의 기본은 거의 변하지 않았습니다.


프로세스 실행은 커널 모드( 커널 모드) 또는 작업 모드( 사용자 모드). 작업 모드에서 프로세스는 프로세서의 비권한 보안 수준에서 허용되는 응용 프로그램 명령을 실행합니다. 이 경우 시스템 데이터 구조를 프로세스에서 사용할 수 없습니다. 프로세스가 커널 서비스를 받아야 할 때 권한 수준에 있는 커널 명령을 실행하는 시스템 호출을 만듭니다.

커널 명령이 실행되기는 하지만 시스템 호출을 수행한 프로세스를 대신하여 수행됩니다. 그런 다음 프로세스 실행이 커널 모드로 전환됩니다. 이러한 방식으로 시스템 커널은 커널 데이터 구조의 무결성을 위반하고 운영 체제를 파괴할 수 있는 애플리케이션 프로세스의 액세스로부터 자체 주소 공간을 보호합니다.

또한 메모리 관리와 관련된 레지스터 변경과 같은 일부 프로세서 명령은 커널 모드에서만 실행될 수 있습니다.
따라서 프로세스 이미지는 커널 모드 데이터와 작업 모드 데이터의 두 부분으로 구성됩니다. 작업 모드 프로세스 이미지는 직접 액세스할 수 있는 코드, 데이터, 스택, 라이브러리 및 기타 데이터 구조의 세그먼트로 구성됩니다. 커널 모드 프로세스 이미지는 커널이 프로세스를 제어하는 ​​데 사용하는 작업 모드 프로세스에 액세스할 수 없는 데이터 구조로 구성됩니다.. 여기에는 레지스터 상태, 메모리 매핑 테이블 등과 같이 하드웨어가 지시하는 데이터는 물론 프로세스를 제공하기 위해 커널에 필요한 데이터 구조가 포함됩니다. 일반적으로 커널 모드에서는 프로세스가 메모리의 모든 영역에 액세스할 수 있습니다.

프로세스 데이터 구조

각 프로세스는 시스템에서 두 가지 주요 데이터 구조로 표시됩니다. 프로세스그리고 사용자,

파일에 각각 설명되어 있습니다. sys/proc.h그리고 sys/user.h. 이러한 구조의 내용과 형식은 UNIX 버전에 따라 다릅니다.

....................................................................................................

https://m.habr.com/ru/company/*nix<-----------
….................................................................................................
언제든지 구조 데이터 프로세스프로세스 이미지를 포함한 나머지 데이터 구조는 스왑 영역인 보조 메모리로 이동할 수 있지만 모든 프로세스는 메모리에 있어야 합니다. 이를 통해 커널은 메모리에 없더라도 프로세스와 관련된 나머지 데이터를 찾는 데 필요한 최소한의 정보를 확보할 수 있습니다. 구조 프로세스방금 살펴본 것처럼 항상 RAM에 있는 시스템 프로세스 테이블의 항목입니다. 현재 실행 중인 프로세스에 대한 이 테이블의 항목은 curproc 시스템 변수에 의해 처리됩니다. CPU 리소스가 다른 리소스로 전송되는 컨텍스트 전환이 있을 때마다
프로세스에 따라 변수 값이 변경됩니다. 통화, 이제 구조를 가리킵니다. 프로세스활성 프로세스. 두 번째로 언급된 구조 사용자,라고도 함 u 지역또는 u-블록에는 프로세스 실행 중에만(즉, 프로세서가 커널 또는 작업 모드에서 프로세스 명령을 실행하는 경우) 커널에 필요한 추가 프로세스 데이터가 포함되어 있습니다. 구조와는 다르게 프로세스, 포인터로 주소 지정 통화, 데이터 사용자배치되어 있다
(보다 정확하게는 표시됨) 커널 가상 메모리의 특정 위치에 있으며 변수로 주소가 지정됩니다. . 두 가지 주요 프로세스 데이터 구조와 UNIX 커널이 이를 처리하는 방법이 아래에 나와 있습니다.
안에 u 지역프로세스 제어뿐만 아니라 많은 커널 하위 시스템에서 사용되는 데이터가 저장됩니다. 특히, 열린 파일 디스크립터, 신호 처리, 프로세스 실행 통계, 프로세스 실행이 일시 중지될 때 저장된 레지스터 값에 대한 정보가 포함되어 있습니다. 분명히 프로세스는 이 데이터를 임의의 방식으로 수정할 수 없어야 하므로 u 영역은 작업 모드에서 액세스로부터 보호됩니다. 그림에서 알 수 있듯이, u 지역고정 크기 스택, 시스템 스택 또는 커널 스택도 포함합니다. 프로세스가 커널 모드에서 실행될 때 운영 체제는 프로세스의 일반 스택이 아닌 이 스택을 사용합니다.

프로세스 상태

프로세스의 수명주기는 여러 상태로 나눌 수 있습니다. 프로세스의 한 상태에서 다른 상태로의 전환은 시스템의 특정 이벤트 발생에 따라 발생합니다.
  • 1. 프로세스는 작업 모드에서 실행됩니다. 이 경우 프로세서는 이 프로세스의 응용 명령을 실행합니다.
  • 2. 프로세스는 커널 모드에서 실행됩니다. 이 경우 프로세서는 시스템 명령을 실행합니다.프로세스를 대신하는 운영 체제 커널.
  • 3 . 프로세스가 실행되고 있지 않지만 스케줄러가 실행되는 즉시 실행할 준비가 되었습니다.그것을 선택합니다(실행 가능 상태). 프로세스는 실행 큐에 있고 모든 것을 가지고 있습니다.컴퓨팅 리소스를 제외하고 필요한 리소스입니다.
  • 4. 프로세스가 절전 상태(잠자기)에 있으며 사용할 수 없는 것을 기다리고 있습니다.I/O 작업 완료와 같은 리소스의 특정 순간.
  • 5. 프로세스가 커널 모드에서 작업 모드로 복귀하지만 커널이 이를 중단하고 다음을 생성합니다.더 높은 우선순위의 프로세스를 실행하기 위한 컨텍스트 전환.
  • 6. 프로세스가 방금 포크에 의해 생성되었으며 전환 중입니다.상태: 존재하지만 실행할 준비가 되지 않았으며 절전 상태가 아닙니다.
  • 7. 프로세스가 종료 시스템 호출을 실행하고 상태에 들어갔습니다.좀비 (좀비, 없어진). 그런 과정은 없지만 기록은 남지만,상위 프로세스에서 사용할 수 있는 반환 코드와 실행에 대한 임시 통계가 포함되어 있습니다.이 상태는 프로세스 수명주기의 최종 상태입니다.
모든 프로세스가 위에 주어진 전체 상태 집합을 거치는 것은 아니라는 점에 유의해야 합니다. 프로세스는 상태에서 수명 경로를 시작합니다. 6 상위 프로세스가 시스템 호출을 할 때 포크(). 프로세스 생성이 완전히 완료된 후 프로세스는 호출의 "자식"을 종료하고 상태로 들어갑니다. 3 출시 준비가 완료되기를 기다리고 있습니다.
실행 대기열. 스케줄러가 실행할 프로세스를 선택하면 상태가 됩니다. 1 작업 모드에서 실행됩니다. 작업 모드 실행은 시스템 호출이나 인터럽트의 결과로 종료되고, 프로세스는 시스템 호출이나 인터럽트 코드가 실행되는 커널 모드로 진입합니다. 그 후에 프로세스는 다시 작업 모드로 돌아갈 수 있습니다. 그러나 커널 모드에서 시스템 호출을 실행하는 동안 프로세스에 현재 사용할 수 없는 리소스가 필요할 수 있습니다. 이러한 리소스에 대한 액세스를 기다리기 위해 프로세스는 커널 함수를 호출합니다. 잠()그리고 수면상태에 들어갑니다 4 . 이 경우 프로세스는 다음으로 높은 우선순위의 프로세스에 제공되는 컴퓨팅 자원을 자발적으로 해제합니다. 리소스를 사용할 수 있게 되면 커널은 다음 함수를 사용하여 "프로세스를 깨웁니다" 깨우다()실행 큐에 넣고 프로세스는 "실행 준비" 상태가 됩니다. 3 .
프로세스에 컴퓨팅 리소스가 제공되면 컨텍스트 전환이 발생하고 그 결과 현재 프로세스의 이미지 또는 컨텍스트가 저장되고 제어가 새 프로세스로 이전됩니다. 예를 들어 프로세스가 절전 모드로 전환되거나 현재 프로세스보다 우선 순위가 높은 프로세스가 실행될 준비가 된 경우 컨텍스트 전환이 발생할 수 있습니다. 후자의 경우 커널은 현재 프로세스를 즉시 중단하고 컨텍스트 전환을 수행할 수 없습니다. 사실 커널 모드에서 컨텍스트 전환을 실행하면 시스템 자체의 무결성이 침해될 수 있습니다.
따라서 프로세스가 커널 모드에서 작업 모드로 전환되어 모든 시스템 작업이 완료되고 커널 데이터 구조가 정상 상태가 될 때까지 컨텍스트 전환이 지연됩니다.
따라서 스케줄러가 실행할 프로세스를 선택한 후 후자가 해당 프로세스를 시작합니다.
커널 모드에서 실행되며 컨텍스트 전환이 완료됩니다. 추가 조건
프로세스는 자신의 기록에 따라 달라집니다. 프로세스가 방금 생성되었거나 중단된 경우 작업 모드로 돌아가면 즉시 해당 모드로 들어갑니다. 프로세스가 절전 상태 이후 실행을 시작하면 커널 모드에서 계속 실행되어 시스템 호출이 완료됩니다. 대기열에 우선순위가 더 높은 프로세스가 있는 경우 커널 모드에서 작업 모드로 전환하는 동안 시스템 호출이 완료된 후 이러한 프로세스가 중단될 수 있습니다. UNIX 4xBSD는 주로 작업 제어 시스템 및 터미널과의 프로세스 상호 작용과 관련된 추가 프로세스 상태를 정의합니다. 중지 신호를 사용하여 프로세스를 "중지" 상태로 만들 수 있습니다. 시그스톱, 시그틴또는 시그투. 실행 중인 프로세스에 대해서만 처리되는 다른 신호와 달리 이러한 신호를 보내면 상태가 즉시 변경되며, 이 경우 프로세스가 실행 중이거나 실행 대기열에 있으면 상태가 "중지됨"으로 변경됩니다. 프로세스가 절전 상태에 있었다면 해당 상태는 "잠자기 상태에서 중지됨"으로 변경됩니다. 이러한 상태의 종료는 계속 신호에 의해 수행됩니다. SIGCONT, 이 경우 프로세스는 "stopped" 상태에서 "ready to run" 상태로 바뀌고, sleep 상태에서 정지된 프로세스의 경우 다음 목적지는 "sleep"을 계속하는 것입니다.
설명된 기능은 SVR4에서 완전히 구현됩니다.

다음 시간 동안 절전 상태에 있는 프로세스에 대해서는 예외가 있습니다.
우선순위가 낮은 이벤트, 즉 발생 확률이 상대적으로 낮은 이벤트(예: 발생하지 않을 수 있는 키보드 입력)

마지막으로 프로세스는 시스템 호출을 실행합니다. 출구()그리고 실행을 마칩니다. 신호 수신으로 인해 프로세스가 종료될 수도 있습니다. 두 경우 모두 커널이 릴리스됩니다. 반환 코드 및 실행 통계를 제외한 프로세스가 소유한 리소스프로세스를 "좀비" 상태로 만듭니다. 프로세스는 부모 프로세스가 시스템 호출 중 하나를 실행할 때까지 이 상태로 유지됩니다. 그 후 프로세스에 대한 모든 정보는 삭제되고 부모는 종료된 프로세스의 반환 코드를 받게 됩니다.

메모리 관리 원칙

Marshall Kirk McKusick FreeBSD - 아키텍처 및 구현<<-----------PDF ст.166

메모리 관리 1편

12:51 - 주소 확인 34:21 - 오버레이, 동적 구조

59:26 - 선형 연속 매핑 - 조각별 선형(제25조)


메모리 관리 2부

처음에는 무슨 일이 일어났나요? OOP 또는 가상 메모리.

51:44--> "가상 메모리";<-(стр. 18)->56:03--> "세그먼트";


연관 방송 버퍼, 번역 참조 버퍼(TLB)는 가상 메모리 주소를 물리적 메모리 주소로 변환하는 속도를 높이는 데 사용되는 특수 CPU 캐시입니다.
https://ru.wikipedia.org
https://www.ibm.com/support/knowledgecenter/.performance/cache_tlbs.htm

운영 체제의 주요 기능 중 하나는 효율적인 메모리 관리입니다.
RAM, 주 메모리 또는 랜덤 액세스 메모리(Random Access Memory, RAM). RAM 액세스 시간은 몇 개의 프로세서 주기에 불과하므로 메모리의 데이터 작업은 최대 성능을 보장합니다.
이 리소스는 일반적으로 제한되어 있습니다. 이는 UNIX라는 범용 멀티태스킹 운영 체제의 경우 더욱 그렇습니다.
따라서 RAM에 담을 수 없는 데이터는 2차 저장장치, 즉 2차 메모리에 위치하게 되는데, 그 역할은 대개 다음과 같은 역할을 수행한다.
디스크 드라이브. 보조 메모리에 대한 액세스 시간은 RAM에 대한 액세스 시간보다 몇 배 더 높으며 운영 체제의 적극적인 지원이 필요합니다.
UNIX 메모리 관리 하위 시스템은 공정하고 효율적인 할당을 담당합니다.
프로세스 간 및 RAM과 보조 메모리 간의 데이터 교환을 위한 공유 RAM 리소스입니다. 일부 작업은 하드웨어, 장치에 의해 수행됩니다.
운영 체제의 제어를 받는 프로세서의 메모리 관리 장치(MMU)를 통해 필요한 성능을 달성합니다.
기본 메모리 관리는 운영 체제의 기능을 크게 감소시킵니다. 일반적으로 이러한 시스템을 사용하면 단일 작업을 RAM의 미리 결정된 위치에 로드하고 제어권을 해당 위치로 전달할 수 있습니다. 이 경우 작업은 다음을 받습니다.
모든 컴퓨터 리소스 폐기(물론 운영 체제와 공유)
작업에 사용되는 주소는 물리적 RAM 주소입니다.
하나의 프로그램을 시작하고 실행하는 이 방법은 확실히 가장 빠르기 때문에 특수한 마이크로프로세서 시스템에서는 흔히 사용되지만 UNIX와 같은 범용 운영체제에서는 사실상 적용이 불가능합니다.
현대 멀티태스킹 운영 체제의 메모리 관리 하위 시스템이 제공해야 하는 다양한 기능을 공식화할 수 있습니다.

  • 운영 규모를 초과하는 작업 수행메모리.
  • 부분적으로 로드된 작업을 메모리에서 실행하여 최소화출시 시간.
  • 여러 작업을 메모리에 동시에 배치하여 CPU 효율성을 향상시킵니다.
  • RAM의 임의 위치에 작업을 배치합니다.
  • RAM의 여러 다른 부분에 작업을 배치합니다.
  • 여러 작업 간에 동일한 메모리 영역을 공유합니다.예를 들어, 동일한 프로그램을 실행하는 여러 프로세스가 코드 세그먼트를 공유할 수 있습니다.
  • 기계 독립적인 코드를 생성하는 기능, 즉 선험적으로 프로그램과 물리적 메모리 사이에 연결이 없어야 합니다.
이러한 모든 기능은 최신 버전의 UNIX에서 다음을 사용하여 구현됩니다. 가상 메모리, 멀티태스킹 운영 체제 전체의 성능은 이 하위 시스템의 구현 및 작동 효율성에 크게 좌우됩니다. 이를 통해 응용 프로그램은 실제로는 컴퓨터의 RAM 용량이 작을 수 있지만 사용 가능한 메모리가 많다는 착각을 불러일으킬 수 있습니다. 이를 위해서는 메모리의 물리적 위치와 구별되는 "주소 공간" 추상화를 정의해야 합니다. 프로그램은 주소 공간에 코드와 데이터에 대한 링크를 생성하며, 이러한 주소는 RAM 셀의 주소로 변환되어야 합니다. 프로그램에서 사용하기 위해 정보를 주 메모리로 전송하고 각 메모리 액세스에 대한 주소 변환을 수행하면 컴퓨터의 소프트웨어와 하드웨어가 함께 작동하게 됩니다.
추신: 리눅스

또한 이 프로세스는 물리적 주소가 아닌 가상 주소로 작동합니다.

설명자 테이블과 테이블 카탈로그를 사용한 계산을 통해 변환이 발생합니다.

Linux는 3가지 수준의 테이블을 지원합니다. 첫 번째 수준 테이블 디렉터리( PGD- 페이지 테이블 디렉토리),

두 번째 레벨 테이블의 디렉토리( PMD- 중간 페이지 테이블 디렉토리) 및 마지막으로 설명자 테이블 (PTE- 페이지 테이블 항목). 실제로는 특정 프로세서가 모든 레벨을 지원하는 것은 아니지만,하지만 헤드룸을 통해 더 많은 가능한 아키텍처를 지원할 수 있습니다(인텔에는 2가지 수준의 테이블이 있습니다.및 알파 - 최대 3).

가상 주소를 물리적 주소로 변환하는 과정은 3단계로 이루어집니다. 포인터가 사용됩니다. PGD각 프로세스를 설명하는 구조에 존재하는 는 레코드 포인터로 변환됩니다. PMD, 후자는 설명자 테이블의 포인터로 변환됩니다. PTE. 그리고 마지막으로 실제 주소로,페이지의 시작 부분을 가리키는 부분에는 시작 부분부터 오프셋이 추가됩니다. 이러한 절차의 좋은 예는 커널 함수에서 찾을 수 있습니다.< 부분_클리어>.


가상 및 물리적 메모리

RAM은 컴퓨터 시스템의 중요한 구성 요소 중 하나입니다. 초기 UNIX 시스템에는 64KB의 RAM이 있었지만 이 양은 분명히 충분하지 않았습니다. 현대 컴퓨터에는 기가바이트의 RAM이 있지만 여전히 충분하지 않습니다.
RAM은 일련의 바이트로 표현될 수 있으며, 각 바이트에는 물리적 주소라고 하는 고유한 주소가 있습니다.프로세서가 RAM과 데이터를 교환할 때 궁극적으로 사용하는 것이 바로 이러한 주소입니다. 그러나 프로세스의 주소 공간은 물리적 RAM의 주소 공간과 크게 다릅니다. 프로세스의 주소 공간이 RAM에 직접 매핑되었다고 가정해 보겠습니다. 즉, 프로세스에서 사용하는 주소가 물리적 주소라고 가정해 보겠습니다. 이 접근 방식을 사용하면 멀티태스킹 시스템을 만드는 과정에서 극복할 수 없는 수많은 장애물이 우리를 기다리고 있습니다.
  • 첫째, 단일 프로세스의 주소 공간을 보호하는 메커니즘은 상상하기 어렵고,다른 주소 공간에서, 더 중요하게는 운영 체제 자체의 주소 공간에서 가져옵니다.각 프로세스는 물리적 주소에서 작동하므로 프로세스가 액세스하지 않는다는 보장은 없습니다.다른 프로세스나 시스템 커널에 속하는 메모리 셀.그러한 치료의 결과는 매우 끔찍할 것입니다.
  • 둘째, 이미 편집 단계에서 배포를 제공해야 합니다.기존 물리적 주소 공간. 시작되면 각 프로세스는 다음을 수행해야 합니다.물리적 주소의 연속적이고 겹치지 않는 영역을 차지합니다.
  • 셋째, 프로세스 간 이러한 메모리 분배는 거의 불가능합니다.최적이라고 할 수 있습니다. 물리적 운영 규모메모리는 프로세스 수를 크게 제한합니다.시스템에서 동시에 실행됩니다. 그래서 8개의 프로세스,각각 1MB의 메모리를 차지하며 8MB를 소모합니다.RAM 및 중간 부하의 운영 체제80개 이상의 프로세스가 있습니다!
이러한 모든 문제는 가상 메모리의 도움으로 극복될 수 있습니다.
그러나 애플리케이션과 커널 자체에서 사용하는 주소가 물리적 주소와 일치할 필요는 없습니다. 가상 주소는 운영 체제 커널의 적극적인 참여를 통해 하드웨어 수준에서 물리적 주소로 변환되거나 매핑됩니다.가상 메모리의 요점은 각 프로세스가 자체 가상 주소 공간에서 실행된다는 것입니다..

가상 주소 공간은 프로세스의 천국입니다.

  • 첫째, 프로세스에는 독점 느낌이 있습니다. 결국 전체 주소 공간이오직 그 사람에게만 속해 있습니다.
  • 둘째, 더 이상 물리적 메모리 양에 의해 제한되지 않습니다. 가상 메모리는육체적인 것을 넘어서다 결과적으로 프로세스는 서로 분리되어 아무런 영향도 받지 않습니다.가능성(원하는 경우에도)이웃의 주소 공간을 "호스트"합니다. 물리적 메모리는 최대한 많이 할당됩니다.효율적 - 개별 프로세스의 가상 메모리 할당에 의존하지 않습니다.
분명히 가상 메모리를 구현하려면 관리되는 매핑 메커니즘이 필요합니다.
가상 주소를 물리적 주소로. 최신 컴퓨터 시스템에서 디스플레이 프로세스는 하드웨어 수준에서 수행됩니다. MMU)(MMU 비트("사용성" 비트)) 제공 고속방송.
운영 체제가 이 프로세스를 관리합니다.

최신 프로세서는 일반적으로 주소 공간(세그먼트 - 페이지 메모리 구성)의 통합을 지원합니다.

V 가변 크기 영역 - 세그먼트그리고

V 고정 크기 영역 - 페이지,

페이지(page) 개념은 물리적 메모리를 일정한 크기(512-2Kb, 2의 배수)의 블록으로 나눌 때 메모리를 정리하는 방식으로 해석할 수 있으며, 세그먼트(segment), 페이지(page) 등의 개념도 있다. 운영 체제의 아키텍처와 작동을 이해하는 기본 추상화 중 하나입니다. 이 경우 각 세그먼트 또는 페이지에는 가상 주소와 실제 주소의 자체 매핑이 있을 수 있습니다.
프로세스의 가상 주소 공간은 일반적으로 코드, 데이터, 스택 및 라이브러리와 같은 세그먼트 내에서 순차적으로 구성됩니다. 실제 메모리의 해당 영역 위치는 다를 수 있습니다. 조각난성격. 가상 메모리의 크기는 보조 메모리 또는 스왑 영역(일반적으로 프로세스 주소 공간 중 일시적으로 사용되지 않는 부분을 저장할 수 있는 디스크 공간)을 사용하여 실제 메모리 크기를 크게 초과할 수 있습니다. 예를 들어 프로세스가 해당 실제 메모리 페이지가 있는 가상 주소를 실행하고 액세스하는 경우 읽기 또는 쓰기 작업이 성공합니다. RAM에서 페이지가 누락되면 프로세서는 페이지 오류(페이지 오류)라는 하드웨어 인터럽트를 생성합니다. 페이지 오류), 이에 대한 응답으로 커널은 스왑 영역에 저장된 페이지 내용의 위치를 ​​결정하고, 페이지를 메모리로 읽고, 가상 주소를 물리적 주소에 매핑하기 위한 매개 변수를 설정하고, 작업을 반복해야 함을 프로세서에 알립니다. 이러한 모든 작업은 가상 메모리를 사용하는 응용 프로그램에 표시되지 않습니다.
가상 주소를 실제 주소로 매핑하는 메커니즘(주소 변환)이 필수적입니다.

특정 하드웨어 구현에 따라 다릅니다. 이 섹션에서는 Intel 프로세서 제품군을 예로 들어 SCO UNIX 운영 체제에서 가상 주소를 물리적 주소로 매핑하는 메커니즘에 대해 설명합니다. 그러나 다른 UNIX 하위 시스템과 마찬가지로 기본 원칙은 거의 다르지 않으며 이 프레젠테이션은 메모리 관리 메커니즘을 소개하고 필요한 경우 특정 구현을 이해하는 데 도움이 됩니다.

세그먼트

Intel 프로세서 제품군을 사용하면 메모리를 세그먼트라고 하는 여러 논리적 부분으로 나눌 수 있습니다. 이 경우 프로세스 주소 공간은 여러 논리 세그먼트의 형태로 표현될 수 있으며, 각 논리 세그먼트는 주어진 범위에 있는 연속적인 주소 시퀀스로 구성됩니다. 분할 기반 주소 변환
세그먼트 주소를 연속 시퀀스로 명확하게 매핑합니다.
실제 주소. 가상 주소는 세그먼트 선택기와 두 부분으로 구성됩니다.
세그먼트 시작을 기준으로 오프셋입니다. 선택자(보다 정확하게는 선택기 필드 색인) 나타내다
메모리에서의 위치와 같은 매개변수를 포함하는 소위 세그먼트 설명자,
크기 및 액세스 권한. 프로세서는 특수 테이블에 있는 세그먼트 설명자를 통해 세그먼트의 간접 주소 지정을 지원합니다.
이 목적을 위한 프로세서 레지스터. 운영 체제 커널은 이러한 테이블을 채우고 레지스터 값을 설정하는 일을 담당합니다. 즉, 커널은 매핑을 설정하고 프로세서는 하드웨어에서 매핑을 수행합니다. 이러한 간접 주소 지정 덕분에 논리 세그먼트가 서로 보호되어 프로세스와 커널 주소 공간의 무결성이 보장됩니다.
세그먼트 설명자는 두 개의 시스템 테이블, 즉 로컬 설명자 테이블에 있습니다.
(로컬 설명자 테이블 - LDT) 및 전역 설명자 테이블 - GDT).
이름에서 알 수 있듯이 LDT는 프로세스 세그먼트의 가상 주소 변환을 제공합니다.
GDT는 커널 주소 공간을 제공하는 반면(예: 시스템을 처리할 때)
호출 또는 인터럽트) 각 프로세스에는 자체 LDT가 있지만 GDT는
모든 프로세스에서 공유됩니다. 선택기가 가리키는 테이블에 대한 정보는 선택기 자체에 있습니다.

1 5 3 2 1 0

색인 T.I. RPL
세그먼트 선택기
  • 필드 색인설명자 테이블에 있는 설명자의 번호(인덱스)입니다.선형 주소를 계산할 때 사용됩니다.
  • 조금 T.I.어떤 설명자 테이블을 사용해야 하는지 지정합니다.Ø - GDT에 해당1 - LDT에 해당
  • 필드 RPL세그먼트에 대한 프로그램 액세스 권한을 제어하는 ​​데 사용됩니다. 요청됩니다권한 수준이며 세그먼트 보호를 보장하는 메커니즘 중 하나입니다.예를 들어 프로세스가 작업 모드에 있는 동안 세그먼트에 액세스하려고 하면커널에 속하면 프로세서는 예외를 생성하고 이에 대한 응답으로 커널은 SIGSEGV 신호를 프로세스에 보냅니다.
각 LDT 또는 GDT 항목은 세그먼트 설명자입니다. 여러 유형의 설명자가 정의되어 코드, 데이터 및 스택 세그먼트와 여러 설명자에 사용됩니다.
이를 통해 권한이 없는 작업(예: 작업 모드의 프로세스)에서 권한 있는 작업(예: 커널)으로의 제어 전송 및 멀티태스킹이 제공됩니다.
후자의 경우에 사용되는 설명자를 게이트라고 합니다.

세그먼트 설명자(코드, 데이터, 스택)에는 다음과 같은 여러 필드가 있습니다.

  • 기본 주소 이 필드는 세그먼트 시작의 32비트 주소를 저장합니다. 프로세서가 추가됩니다.오프셋을 적용하고 32비트 선형 주소를 얻습니다.
  • 제한 이 필드는 세그먼트의 크기를 지정합니다. 결과적으로선형 주소가 세그먼트 제한을 벗어나면 프로세서가 예외를 생성합니다.세그먼트 경계를 통해 프로세서는 스택 오버플로,잘못된 포인터, 잘못된 호출 주소 및전환. 운영 체제가 이를 믿는 경우세그먼트 외부에서 호출하는 것은 오류가 아닙니다.(예: 스택 오버플로 시) 할당하여 세그먼트를 확장할 수 있습니다.메모리를 추가하고 명령을 다시 실행하도록 요청합니다.
  • 권한 설명자 권한 수준(DPL)이라고 하는 이 필드는 권한 수준을 정의합니다.세그먼트 권한을 부여하며 선택기의 RPL 필드와 함께 사용되어 액세스를 허용하거나 거부합니다.세그먼트에. 세그먼트에 접근하려면 작업 수준이 최소한 동일해야 합니다.같은 특권세그먼트, 즉 RPL DPL.
  • 존재의 표시. 이 비트는 가상 메모리 구현을 위한 메커니즘 중 하나를 제공합니다.비트가 설정되지 않은 경우 액세스를 시도할 때세그먼트에 대해 프로세서는 누락된 예외를 생성합니다.세그먼트를 사용하면 커널이 보조 메모리에서 세그먼트를 로드하고 명령을 다시 반복할 수 있습니다.프로세스 실행에 영향을 주지 않고. 그러나 대부분의 최신 버전에서는UNIX 가상 메모리는 페이지 메커니즘을 기반으로 합니다.세그먼트는 항상 메모리에 존재하며 작동과 세그먼트 간의 교환은보조 메모리는 페이지 수준에서 발생합니다.
  • 유형 이 필드는 세그먼트 유형을 지정합니다. 프로세서가 유형을 확인합니다.실행 중인 명령을 준수하기 위한 세그먼트입니다. 특히 이것은 우리가 해석하는 것을 허용하지 않습니다.데이터 세그먼트 정보를 프로세서 명령어로 사용합니다.
  • 액세스 권한 이 필드는 다음 세트를 제한하는 액세스 권한을 정의합니다.세그먼트로 수행할 수 있는 작업입니다. 예를 들어,코드 세그먼트는 일반적으로 실행 가능하고 읽을 수 있는 것으로 표시됩니다.데이터 세그먼트는 읽기 전용 액세스 권한을 가질 수 있습니다.또는 읽고 쓰기 위해.
선택자와 오프셋의 조합은 논리 주소를 형성합니다.프로세서 메모리 제어 장치
해당 설명자를 결정하기 위해 선택기를 사용합니다. 디스크립터에 저장된 세그먼트의 기본 주소를 오프셋과 함께 추가함으로써 프로세서는 선형 주소를 생성합니다.페이징을 사용하지 않으면 결과 선형 주소는 RAM에 직접 액세스하는 데 사용되는 물리적 주소입니다. 그러나 가상 메모리의 세그먼트 전용 구현은 유연성이 부족하여 최신 버전에서는 사용되지 않습니다. 대부분의 시스템에서 메모리 관리는 페이지 메커니즘을 기반으로 합니다. 세그먼트는 커널에서 코드, 데이터 및 프로세스 스택을 수용하는 데 사용되며 각각 기본 주소는 0이고 제한은 3GB입니다. 즉, 주소 지정 가능한 모든 가상 메모리에서 시스템 커널이 차지하는 1GB를 뺀 값입니다.
커널과 프로세스 사이의 가상 주소 공간 분포는 ""에서 논의됩니다.

페이지 메커니즘

분할만을 기반으로 가상 메모리를 구현할 때 전체 세그먼트는 RAM에 있거나 없을 수 있습니다(보다 정확하게는 보조 메모리나 프로세스의 실행 파일에 위치함).
세그먼트 크기가 상당히 클 수 있으므로 여러 개의 큰 프로세스를 동시에 실행하면 메모리 리소스에 대한 심각한 경쟁이 발생하며 이는 결국
RAM과 보조 메모리 간의 집중적인 데이터 교환으로 이어질 것입니다. 또한 세그먼트인 가변 크기 영역의 교환은 상당히 복잡하며, 메모리 조각화는 적더라도 사용 효율성이 떨어지게 됩니다.
사용되지 않는 공간이 많이 남습니다.

페이지 메커니즘은 훨씬 더 큰 유연성을 제공합니다. 이 경우 전체 가상 주소 공간(Intel 프로세서의 경우 4GB)은 페이지라는 동일한 크기의 블록으로 나뉩니다. 대부분의 Intel 프로세서는 4KB 페이지로 작동합니다. 분할과 마찬가지로 페이지는 RAM에 있거나
또는 프로세스의 스왑 영역이나 실행 파일에 있어야 합니다. 이 방식의 가장 큰 장점은 메모리 관리 시스템이 매우 작은 영역에서 작동한다는 것입니다.
프로세스 간 메모리 리소스의 효율적인 할당을 보장하는 크기입니다.
페이징 메커니즘을 사용하면 세그먼트 중 일부가 RAM에 있고 일부는 누락될 수 있습니다. 이를 통해 커널은 현재 프로세스에서 사용 중인 페이지만 메모리에 배치하여 RAM을 크게 확보할 수 있습니다. 또 다른 장점은 세그먼트 페이지가 물리적 메모리에 어떤 위치와 순서로든 배치될 수 있어 여유 공간을 효율적으로 사용할 수 있다는 것입니다.
이 접근 방식은 디스크의 파일 저장 체계를 연상시킵니다. 각 파일은 다음으로 구성됩니다.
자유로운 공간에 위치할 수 있는 다양한 수의 데이터 저장 블록 디스크 드라이브. 이로 인해 조각화가 크게 발생하지만 디스크 공간 효율성이 크게 향상됩니다.

페이징 메커니즘을 사용하는 경우 세그먼트 기본 주소와 오프셋을 추가하여 얻은 선형 주소도 프로세서의 페이징 블록에서 추가로 처리되는 논리 주소입니다. 이 경우 선형 주소는 프로세서에서 세 부분으로 구성된 것으로 간주됩니다.


페이지 디렉토리 항목, PDE- 첫 번째 주소 필드인 비트 22~31은 페이지 테이블 디렉토리 항목을 가리킵니다. PDE. 페이지 테이블 디렉토리는 한 페이지 길이이며 최대 1024개의 페이지 테이블 포인터를 포함합니다. 따라서 첫 번째 필드는 특정 페이지 테이블을 지정합니다.
페이지 테이블 항목, PTE- 비트 12~21을 차지하는 두 번째 필드는 페이지 테이블 요소를 가리킵니다. RTE. 페이지 테이블의 길이도 4KB이고 테이블 요소는 총 1024페이지를 처리합니다. 즉, 두 번째 필드는 특정 페이지를 지정합니다.
마지막으로 페이지 오프셋은 선형 주소의 하위 12비트를 차지하는 세 번째 필드에 의해 결정됩니다. 따라서 단일 테이블 디렉토리를 사용하여 프로세스는 다음을 처리할 수 있습니다.

1024 x 1024 x 4096 = 4GB의 물리적 메모리.

위 그림은 프로세서의 페이지 주소 지정 장치가 선형 주소를 물리적 주소로 변환하는 방법을 보여줍니다. 프로세서는 PDE 주소 필드(상위 10비트)를 테이블 디렉토리에 대한 인덱스로 사용합니다. 설립하다요소에는 페이지 테이블의 주소가 포함됩니다. 두 번째 PTE 선형 주소 필드에서는 프로세서가 다음을 선택할 수 있습니다.실제 페이지의 주소를 지정하는 원하는 테이블 요소입니다. 오프셋과 함께 페이지 시작 주소를 추가하고,세 번째 필드에 저장되면 프로세서는 32비트 물리적 주소를 수신합니다.

대부분의 최신 프로세서, 특히 Intel 프로세서 제품군은 초고속 캐시에 사용한 마지막 몇 페이지에 대한 데이터를 저장합니다. 프로세서가 이 캐시에서 필요한 페이지를 찾지 못한 경우에만 디렉토리 및 페이지 테이블에 액세스합니다. 일반적으로 주소 링크의 99-98%는 디렉토리와 테이블이 있는 RAM에 액세스하기 위해 주소 변환이 필요하지 않고 캐시에 저장됩니다.
각 페이지 테이블 요소에는 서로 다른 내용을 설명하는 여러 필드가 포함되어 있습니다.

페이지 특성. 필드 PTE:


RAM에 존재한다는 표시입니다. 메모리에 없는(P=0) 페이지에 액세스하면 페이지 오류가 발생합니다. 이 예외는 프로세서가 커널에 알리고 그에 따라 처리합니다.
읽기/쓰기 페이지 읽기만(R/W=0) 또는 읽고 쓰기(R/W=1)할 수 있는 권한

우리를
접근 권한. U/S=0인 경우 권한 있는 작업만(커널)은 페이지 주소에 접근할 수 있습니다. 그렇지 않으면 다음에 대한 액세스페이지에는 모든 작업이 있습니다.
주소 페이지 시작 부분의 물리적 주소(기본 주소)

프로세스 주소 공간

커널의 주소 공간은 일반적으로 현재 실행 중인 프로세스의 주소 공간과 동일합니다. 이 경우 커널은 프로세스와 동일한 컨텍스트에 위치한다고 합니다. 컴퓨팅 리소스가 프로세스로 이전될 때마다 시스템은
범용 레지스터, 세그먼트 레지스터 및 작업 모드 프로세스의 가상 메모리를 매핑하는 페이지 테이블에 대한 포인터의 값을 포함하여 이 프로세스의 작업 컨텍스트입니다. 동시에 시스템 컨텍스트는 모든 프로세스에 대해 변경되지 않은 상태로 유지됩니다. 프로세스 주소 공간의 모습은 아래 그림과 같습니다.