대형 시스템 설명자 버러우
Burroughs large systems descriptors이 글은 검증을 위해 인용구가 추가로 필요하다. – · · · (2021년 1월) (이 템플릿 하는 방법과 |
설명자는 현재(2006년 기준) 유니시스 클리어패스/MCP 시스템을 포함한 버러브스 대형 시스템의 아키텍처 기능이다.스택 기반과 태그 기반 외에도, 이러한 시스템의 주목할 만한 구조적 특징은 설명자 기반이라는 것이다.설명자는 배열과 객체에 대해 스택에 상주하지 않는 데이터를 갖는 수단이다.설명자는 컴파일러와 상용 애플리케이션에서와 같이 문자열 데이터에도 사용된다.
세부 사항
설명자는 저장 영역, I/O 요청 및 I/O 결과를 설명한다.여기에는 설명자의 유형, 주소, 길이, 데이터가 저장소에 있는지 여부를 나타내는 필드가 포함되어 있다.자세한 내용은 제품군과 설명자의 종류에 따라 다르다.다음 텍스트는 Burroughs 설명서에 따라 가장 왼쪽(가장 유의한) 비트에 0으로 번호를 부여한다.
B5000, B5500 및 B5700
B5000은[1] 최초의 설명자 기반 컴퓨터였다.모든 설명자는 플래그(비트 0)가 1. 데이터 설명자는 대부분의 I/O 설명자와 마찬가지로 15비트 스토리지 주소와 10비트 크기를 포함한다.프로그램 설명자와 외부 결과 설명자는 15비트 주소를 가지지만 크기 필드는 없다.
B5x00 프로그램 설명자
프로그램 설명자는 프로그램 세그먼트를 정의하는 데 사용된다.프로그램 설명자를 참조하는 피연산자 호출 또는 설명자 호출 중 하나가 존재 비트가 1이면 서브루틴 호출을 발생시키고 그렇지 않으면 존재 인터럽트를 발생시킨다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8-17 | 18-32 | 33-47 |
---|---|---|---|---|---|---|---|---|---|---|
깃발 | I | 존재감 | I | 모드 | A | 주소 | ||||
1 | 1 | 0=기억이 안 된다. 1=기억에 | 1 | 0=단어 1=문자 | 0=반론 필요 없음 1=필요한 주장 |
데이터 설명자
데이터 설명자는 존재 비트의 값에 따라 메모리에 있는 데이터 블록(P=1) 또는 메모리로 읽어야 하는 데이터 블록(P=0)을 가리킨다.데이터 설명자를 참조하는 피연산자 호출 또는 설명자 호출은 존재 비트와 크기 필드를 검사한다. 존재 비트가 0이면 존재 인터럽트가 발생하고, 크기 필드가 0이 아닌 경우 스택의 두 번째 단어가 범위 내에 있거나 인덱스 인터럽트가 발생한다.
0 | 1 | 2 | 3-7 | 8-17 | 18 | 19 | 20 | 21-32 | 33-47 |
---|---|---|---|---|---|---|---|---|---|
깃발 | I | 존재감 | 크기 | I | C | 주소 | |||
1 | 0 | 0=기억이 안 된다. 1=기억에 | 예약됨 MCP용 | 예약됨 MCP용 | 0=부동 1=인테거 | [D5 1] | 예약됨 MCP용 |
- ^ 연속성 비트 - 프로그램 릴리스 운영자에 의해 발생하는 인터럽트 유형을 제어하기 위한 비트
0=프로그램 릴리스 인터럽트 설정 - 탱크가 채워지지 않은 I/O 영역 또는 마지막 I/O 영역
1=연속성 인터럽트 설정 - I/O 영역이 탱크로 채워짐
I/O 설명자
0 | 1 | 2 | 3-7 | 8-17 | 18-32 | 33-47 |
---|---|---|---|---|---|---|
깃발 | I | 번갈아 외부의 | 구성 단위 | 크기 | 장치 종속적 | 주소 |
1 | 1 | 0=쓰기 1=읽다 |
외부 결과 설명자
외부 결과 설명자에는 일부 필드를 교체한 상태에서 작업을 시작하는 데 사용되는 I/O 설명자가 포함되어 있다.
0 | 1 | 2 | 3-7 | 8-25 | 26-32 | 33-47 |
---|---|---|---|---|---|---|
깃발 | I | 번갈아 외부의 | 구성 단위 | 관계없는 | 장치 종속적 | 주소 |
1 | 1 | 0=쓰기 1=읽다 | 착오 조건들 | 지난 위치 |
B6500, B7500 및 후계자
설명자들은 데이터 블록을 설명한다.각 설명자에는 데이터 블록을 참조하는 20비트 주소 필드가 포함되어 있다.각 블록은 길이가 20비트인 설명자에 저장되어 있다.데이터의 크기 또한 3비트 필드에 4비트, 6비트, 8비트 또는 48비트 데이터로 제공된다.
이 아키텍처를 갖춘 최초의 컴퓨터는 B6500이었다. 그 구현에서 다양한 상태 비트의 의미는 다음과 같았다.
- 비트 47 – 존재 비트(P-Bit)
- 비트 46 – 복사 비트
- 비트 45 – 인덱싱된 비트
- 비트 44 – 분할된 비트
- 비트 43 – 읽기 전용 비트
이후 구현에서 이러한 상태 비트는 증가하는 메모리 크기에 보조를 맞추고 통찰력을 얻기 위해 진화했다.
비트 47은 아마도 시스템에서 가장 흥미로운 비트일 것이다 – 그것은 구조가 가상 메모리를 구현하는 방식이다.가상기억은 원래 1950년대 말 맨체스터 대학의 아틀라스 프로젝트를 위해 개발되었다.이것이 상업적 응용에 이용되는 것을 보고 싶어 그들은 버로우스와 IBM의 기술자들을 포함한 세미나에 몇몇 컴퓨터 회사의 기술자들을 초대했다.버러우스 엔지니어들은 가상 메모리의 중요성을 보고 그것을 B5000에 넣었다.IBM 엔지니어들은 관심이 없었고 IBM은 10년 동안 가상 메모리를 "invent"하지 않았다.
설명자가 참조되면 하드웨어는 비트 47을 점검한다.1일 경우, 데이터는 주소 필드에 표시된 위치에 메모리에 있다.비트 47이 0이면 데이터 블록이 존재하지 않고 인터럽트(p-bit interrupt)가 올라가고 블록을 존재하게 하는 MCP 코드를 입력한다.이 경우 주소 필드가 0이면 데이터 블록이 할당되지 않고(초기 p-bit) MCP가 길이 필드에 주어진 크기를 자유 블록으로 검색한다.
마지막 p-비트 시나리오는 비트 47이 0일 때인데, 이것은 데이터가 메모리에 있지 않음을 나타내지만 주소는 0이 아니므로 데이터가 할당되었음을 나타내며, 이 경우 주소는 디스크의 가상 메모리 영역에 있는 디스크 주소를 나타낸다.이 경우 p-bit 인터럽트가 제기되며 "기타" p-bit로 기록된다.
컴파일러에서의 사용
ALGOL에서는 배열의 크기가 컴파일 시간에 고정되어 있는 파스칼과는 달리 배열의 한계는 완전히 동적이다.이는 표준에 정의된 파스칼의 주요 약점이지만, 파스칼의 많은 상업적 구현, 특히 버로우스 구현(아더 세일 및 로이 프리크에 의한 태즈매니아 대학 버전과 매트 밀러 외 연구원의 버로우스 슬라이스에 대한 구현)에서 제거되었다.
Burroughs 환경의 프로그램에서 배열을 선언할 때는 배열이 할당되지 않고, 처음 접촉할 때만 배열이 할당되므로 배열을 선언할 수 있으며 배열을 사용하지 않을 경우 배열에 대한 오버헤드는 피할 수 있다.
또한 C와 유닉스의 만록 등급과 같은 낮은 수준의 메모리 할당 시스템 호출은 필요하지 않으며, 어레이는 사용 시 자동으로 할당된다.이는 프로그래머가 메인프레임 애플리케이션에서 중요한 메모리 관리의 오류 발생 가능성이 높은 활동으로 프로그램을 채우는 큰 부담을 덜어준다.
C와 같은 하위 언어로 프로그램을 포팅할 때, C 메모리 구조는 할당된 B5000 블록 내에서 자체 메모리 할당을 수행하여 처리되므로 B5000 시스템의 나머지 보안은 잘못된 C 프로그램에 의해 손상될 수 없다.실제로 달리 정확하게 실행되는 C 프로그램의 많은 버퍼 오버런은 B5000[citation needed] 아키텍처에 포팅되었을 때 잡혔다.C도 파스칼과 마찬가지로 슬라이스 컴파일러 시스템(LLLVM과 마찬가지로 모든 언어에 공통 코드 생성기와 최적화기를 사용한다)을 사용하여 구현되었다.C 컴파일러, 런타임 시스템, POSIX 인터페이스, 그리고 많은 유닉스 툴의 포트는 스티브 바텔스에 의해 수행되었다.에펠 컴파일러도 슬라이스를 사용하여 개발되었다.
B5000 아키텍처보다 더 동적으로 객체를 생성해야 하는 객체 지향 프로그램의 경우 객체는 단일 B5000 블록 내에서 가장 잘 할당된다.이러한 물체 할당은 C의 말로크보다 높은 수준이며 현대적인 효율적인 쓰레기 수거기로 가장 잘 구현된다.
메모리 아키텍처의 통합
B5000의 주소 필드는 15비트에 불과해 설명자에 의해 32K 단어(192KB)의 메모리만 어드레싱할 수 있다는 뜻이다.B6500은 이를 20비트 또는 1메가 워드(6MB)로 확장했다.70년대 중반까지 이것은 여전히 건축의 중요한 제약이었다.이를 극복하기 위해 다음과 같은 두 가지 해결책이 구현되었다.
- 스와퍼 – 이 솔루션은 실제로 메모리 관리 외에도 다른 계층을 구현하여 한 번에 관련 데이터의 대규모 클러스터를 메모리 안팎으로 이동시킨다.
- ASN – 이 솔루션은 물리적으로 시스템에서 더 많은 메모리를 구성할 수 있으며, 별도로 주소 지정 가능한 청크로 나뉜다.이 아키텍처는 ASN(주소 공간 번호) 메모리로 알려지게 되었다.메모리는 두 영역으로 논리적으로 나뉘는데, 운영체제의 Global Address Space에 낮은 메모리 주소를 할당하고 개별 프로그램의 여러 병렬 Local Address Space에 소프트웨어와 높은 메모리 주소를 지원한다.주소 공간에는 번호가 매겨지고, 전역은 0, 로컬 주소 공간은 1..n이 표시된다.데이터를 공유하는 프로그램은 자동으로 동일한 주소 공간에 배치된다.
이러한 기능을 활용하기 위해 프로그램 코드 수정이 필요하지 않았다.두 솔루션 모두 결합할 수도 있지만, 결국 MCP 메모리 요구사항과 프로그램 데이터 공유 요구사항은 주소 공간 자체의 최대 크기를 초과한다.
1980년대 초 A시리즈의 등장으로 마스터 설명자의 주소를 포함하도록 이 필드의 의미가 바뀌었는데, 이는 1메가바이트의 데이터 블록을 할당할 수 있지만, 머신 메모리는 기가바이트 또는 테라바이트로 크게 확장될 수 있다는 것을 의미한다.이 아키텍처는 ASD(Advanced Segment Descriptors) 메모리라고 명명되었다.이를 위해서는 베타라고 하는 새로운 공통 마이크로코드 규격이 필요했다.ASD 기억 뒤에 있는 주요 시각가는 존 맥클린톡이다.이후 3비트 메모리 태그가 4비트 사양으로 늘어나 세그먼트 설명자의 크기가 20비트에서 23비트까지 커질 수 있게 되어 더 많은 메모리를 동시에 처리할 수 있게 되었다.이 마이크로코드 규격은 레벨 감마(Level Gamma)로 알려지게 되었다.
메모리 관리
가상 메모리에 또 다른 중요한 이점이 실현되었다.B5000 설계에서 데이터 블록이 롤아웃된 경우 존재 비트 및 주소를 업데이트하기 위해 해당 블록을 참조하는 모든 설명자를 찾을 필요가 있었다.마스터 설명자에서는 마스터 설명자의 존재 비트만 변경하면 된다.또한 MCP는 압축을 위해 메모리에서 블록을 이동할 수 있으며 마스터 설명자의 주소만 변경하면 된다.
B5000과 대부분의 다른 시스템 간의 차이점은 다른 시스템이 페이징된 가상 메모리를 주로 사용한다는 것이다. 즉 페이지는 그 안에 있는 정보의 구조에 관계없이 고정된 크기의 청크로 스왑된다.B5000 가상 메모리는 설명자가 설명한 대로 크기가 다양한 세그먼트에서 작동한다.
메모리가 일정 용량으로 채워지면, "작업 세트 보안관"이라는 OS 프로세스가 호출되어 컴팩트 메모리 또는 메모리 부족으로 세그먼트를 이동하기 시작한다.코드 세그먼트는 변경할 수 없고 코드 파일의 원본에서 다시 로드할 수 있으므로, 쓸 필요가 없으며, 가상 메모리 파일에 기록되는 데이터 세그먼트를 먼저 선택한다.
P비트 인터럽트는 시스템 성능을 측정하는 데도 유용하다.첫 번째 할당에 대해 'init p-bits'는 예를 들어 배열을 할당하는 절차가 계속 호출되는 경우 프로그램의 잠재적인 성능 문제를 나타낸다.디스크의 가상 메모리에서 블록을 다시 로드하면 시스템 성능이 크게 저하될 수 있으며 특정 작업의 고장이 아니다.이것이 오늘날의 많은 컴퓨터들이 메모리를 추가함으로써 시스템 성능을 향상시킬 수 있는 이유다.B5000 머신에서 '기타 p-bits'는 시스템 문제를 나타내는데, 이는 하루 동안 컴퓨팅 부하를 더 잘 분산시키거나 메모리를 더 추가함으로써 해결할 수 있다.
그러므로 Burroughs 대형 시스템 아키텍처는 개별 작업과 시스템 전체를 최적화하는 데 도움이 된다.
버퍼 오버플로 방지
설명자에 대해 마지막으로 주목해야 할 가장 중요한 점은 설명자들이 시스템 보안과 프로그램 정확성의 보완적 개념에 어떻게 영향을 미치는가이다.해커가 오늘날의 운영 체제를 손상시킬 수 있는 가장 좋은 도구 중 하나는 버퍼 오버플로다.특히 C는 데이터 스트림 자체에서 null 바이트를 문자열의 끝 Sentinel로 사용하여 문자열의 끝을 표시하는 가장 원시적이고 오류가 발생하기 쉬운 방법을 사용한다.
포인터는 지수화된 설명자에 의해 B5000에 구현된다.인덱싱 작업 중에는 각 증분에서 포인터를 확인하여 소스 블록과 대상 블록이 모두 범위를 벗어났는지 확인하십시오.검색 또는 교체 작업 중에 소스와 대상 모두 큰 메모리 블록을 읽거나 복사하는 데 사용되는 메커니즘이 각 단어 증분에서 유효한 메모리 태그를 검사한다.각 메모리 세그먼트는 태그 3 단어에 의해 제한되며, 이 경우 그러한 작업이 실패하게 된다.프로그램 코드와 같이 무결성에 민감한 데이터를 포함하는 각 메모리 세그먼트는 태그 3 단어에 저장되어 수정은 말할 것도 없고 통제되지 않는 읽기가 불가능하다.따라서 소프트웨어 생산에 들어가기 전에 프로그램 오류의 유의미한 출처를 조기에 감지할 수 있으며, 시스템 보안에 대한 보다 유의한 수준의 공격은 불가능하다.