Burroughs 대형 시스템

Burroughs large systems

Burroughs Large Systems Group은 고밀도 [NB 1]음절을 가진 스택 머신 명령 세트를 사용하여 48비트 대형 메인프레임 제품군을 생산했습니다.이 제품군의 첫 번째 기계는 1961년식 B5000이었다.싱글패스 컴파일러를 사용하여 ALGOL 60 프로그램을 매우 잘 컴파일할 수 있도록 최적화되어 있습니다.그것은 B5500으로 진화했다.그 후의 주요 재설계에는, B6500/B6700 라인과 그 후계기, 및 별개의 B8500 라인이 포함됩니다.

1970년대에 Burroughs Corporation은 하이엔드, 미드레인지 및 엔트리 레벨의 비즈니스 컴퓨터 시스템을 위한 매우 다른 제품 라인 아키텍처를 가진 3개의 부서로 조직되었습니다.각 부서의 제품 라인은 특정 프로그래밍 언어에 맞게 컴퓨터의 명령 집합을 최적화하는 방법에 대한 다른 개념에서 발전했습니다."Burroughs Large Systems"는 COBOL에 최적화된 중규모 시스템(B2000, B3000, B4000) 또는 유연한 아키텍처의 Small Systems(B1000)와 대조적으로 이러한 대규모 시스템 제품군을 모두 지칭합니다.

배경

1880년대에 설립된 Burroughs는 컴퓨팅 분야에서 가장 오래된 기업입니다(Elliott Brothers는 Burroughs 이전에 설립되었지만 19세기에는 컴퓨팅 디바이스를 제조하지 않았습니다).1950년대 후반까지 컴퓨팅 장비는 Sensimatic과 같은 전기 기계식 회계 기계에만 국한되었습니다.기존 경쟁사인 IBM과 NCR이 대규모 컴퓨터를 생산하기 시작했거나 최근 설립된 유니백과 경쟁할 만한 것이 없었다.1956년에 ElectroData Corporation을 인수하여 B205로 디자인을 변경했습니다.

Burroughs의 첫 번째 내부 개발 기계인 B5000은 1961년에 설계되었으며, Burroughs는 그 당시 사용 가능한 가장 진보된 컴퓨팅 아이디어에 기초한 완전히 다른 디자인의 전략으로 시장에 늦게 진입하는 것에 대처하려고 했습니다.B5000 아키텍처는 사용되지 않았지만 B6500(및 후속 B6700 및 B7700)에 영감을 주었습니다.이 아키텍처를[citation needed] 사용하는 컴퓨터는 B6700에 처음 도입된 MCP 운영 체제의 진화되었지만 호환되는 버전을 실행하는 Unisys ClearPath Libra 서버로서 여전히 운영 중이었다.세 번째이자 가장 큰 라인인 B8500은 [1][2]상업적 성공을 거두지 못했다.Unisys는 독자적인 CMOS 프로세서 설계와 더불어 인텔 Xeon 프로세서를 사용하여 MCP, Microsoft Windows 및 Linux 운영체제를 Libra 서버에서 실행하고 있습니다.커스텀 칩의 사용은 점차 없어졌으며 2018년까지 Libra 서버는 완전히 범용 인텔이 되었습니다.

B5000

첫 번째 시리즈의 멤버인 B5000은 [3]1961년 로버트 바튼이 이끄는 팀에 의해 설계되었다.그것은 특이한 건축물을 가지고 있었다.아키텍처는 컴퓨터 과학자인 John Mashey에 의해 그가 가장 존경하는 아키텍처 중 하나로 선정되었습니다.지금까지 [4]본 하드웨어/소프트웨어 통합 설계 중 가장 혁신적인 사례 중 하나라고 항상 생각했습니다.B5000은 B5500[5](드럼 스토리지가 아닌 디스크를 사용)과 B5700(공유 디스크 주위에 여러 CPU를 클러스터화할 수 있음)에 의해 계승되었습니다.B5700의 후속 기종은 없었지만 B5000 라인은 B6500 설계에 큰 영향을 미쳤고 Burroughs는 Master Control Program(MCP; 마스터 제어 프로그램)을 그 기계에 이식했습니다.

특징들

  • 모든 코드가 자동으로 재입력됩니다(ACM Monograph의 그림 4.5는 그 이유를 간결하게 보여줍니다). 프로그래머는 표시된 2개의 단순한 프리미티브를 사용하는 것 외에 다른 언어로 코드를 프로세서에 배포하기 위해 더 이상 작업을 수행할 필요가 없습니다.이 아키텍처의 주요 기능은 다음과 같습니다.
    • 부분적으로 데이터 중심 태그 부착 및 디스크립터 기반 설계
    • 하드웨어는 소프트웨어 요건을 지원하도록 설계되어 있습니다.
    • 고급 프로그래밍 언어만을 지원하도록 설계된 하드웨어
    • 어셈블리 언어 또는 어셈블러는 없습니다.모든 시스템소프트웨어는 ALGOL 60의 다양한 형태로 작성되어 있습니다.그러나 ESPOL은 아키텍처의 각 음절에 대한 문구를 가지고 있었다.
    • 액세스 가능한 프로그래머 레지스터가 거의 없음
    • 단순화된 명령어 세트
    • 모든 작업에서 명시적 오퍼랜드가 아닌 스택을 사용하는 스택머신이 접근법은 이제 인기가 없어졌다.
    • 모든 인터럽트 및 프로시저 콜이 스택을 사용합니다.
    • 운영 체제 지원(MCP, 마스터 제어 프로그램)
  • 비대칭(마스터/슬레이브) 다중 처리 지원
  • COBOL 등 다른 언어 지원
  • 강력한 문자열 조작
  • 데이터 무단 액세스 또는 운영[NB 2] 중단을 방지하는 안전한 아키텍처 시도
  • 소프트웨어 개발 및 테스트를 지원하는 조기 오류 감지
  • Feranti Atlas에만 탑재된 시판용 가상 메모리.
  • 최초의 세그먼트 메모리 모델
  • Unisys ClearPath/MCP 머신에 아직 후계기 존재

시스템 설계

B5000은 아키텍처와 명령 세트가 소프트웨어의 요구를 고려하여 설계되었다는 점에서 당시로서는 이례적이었습니다.이는 프로세서와 명령어 세트를 설계하고 소프트웨어 담당자에게 넘겨주던 당시의 컴퓨터 시스템 설계와는 크게 다른 것이었습니다.

Word 모드의 B5000, B5500 및 B5700 에는, 메인 프로그램의 실행(SALF 오프)과 서브 루틴(SALF 온) 중 어느 쪽인가에 따라, 2개의 다른 어드레싱 모드가 있습니다.메인 프로그램의 경우 Operand Call 또는 Descriptor Call 음절의 T 필드는 Program Reference Table(PRT; 프로그램 참조 테이블)에 상대적입니다.서브루틴의 경우 어드레싱 유형은 B5x00 Relative Addressing에 나타나 있듯이 T의 상위3비트와 Mark Stack Flip Flop(MSFF)에 따라 달라집니다.

B5x00 상대[6] 어드레싱
사루프[a] T0
A38
T1
A39
T2
A40
MSFF[b] 기초 내용물 색인 기호 색인
비트[c]
맥스.
색인
쉬는 - - - - R PRT 주소 + T 0-9
A 38-47
1023
쉬는 - - - R PRT 주소 + T 1-9
A39-47
511
쉬는 - 쉬는 F 스택상의 마지막[d] RCW 또는 MSCW[e] 주소 + T 2-9
A 40-47
255
쉬는 - (R+7)[f] PRT[e]+7에서 MSCW에서 F 레지스터 + T 2-9
A 40-47
255
쉬는 - C[g]. 현재 명령어 주소 + T 3-9
A 41-47
127
쉬는 F 스택상의 마지막[d] RCW 또는 MSCW[e] 주소 - T 3-9
A 41-47
127
(R+7)[f] PRT[e]+7에서 MSCW에서 F 레지스터 - T 3-9
A 41-47
127
주의:
  1. ^ SALF 서브루틴 레벨 플립플롭
  2. ^ MSFF Mark Stack Flip Flop
  3. ^ Operand Call(OPDC) 및 Descriptor Call(DESC) 음절의 경우 상대 주소는 음절의 비트0 ~ 9(T레지스터)입니다.스토어 연산자(CID, CND, ISD, ISN, STD, STN)의 경우 플래그 비트가 설정되어 있으면 A 레지스터(스택의 상단)에 절대 주소가 포함되어 있으며 플래그 비트가 꺼져 있으면 상대 주소가 포함되어 있습니다.
  4. ^ a b RCW 리턴 컨트롤 워드
  5. ^ a b c d MSCW 마크 스택 제어 워드
  6. ^ a b PRT+7에서 MSCW에서 F 레지스터
  7. ^ C(현재 명령어)-상대 R(PRT)-상대적 스토어, 프로그램 및 I/O 릴리스 오퍼레이터용

언어 지원

B5000은 고도의 언어만을 지원하도록 설계되어 있습니다.이것은 FORTRANCOBOL에서 그러한 언어가 두드러지기 시작한 시기였다. FORTRAN과 COBOL은 일부 사람들에 의해 현대 소프트웨어 기술에 관한 한 약한 언어로 여겨졌기 때문에, 대부분 시도되지 않은 새로운 언어인 ALGOL-60이 채택되었다.B5000용으로 선택된 ALGOL 사투리는 엘리엇 ALGOL, C에 의해 최초로 설계 및 구현되었습니다. A. R. Hoare는 엘리엇 503에 탑승했습니다이것은 (ALGOL이 무시한) I/O 명령과 강력한 문자열 처리 명령과 함께 ALGOL의 실질적인 확장입니다.Hoare의 유명한 Turing Award 강의는 이 주제에 관한 것이었다.

따라서 B5000은 매우 강력한 언어에 기반을 두고 있었다.Donald Knuth는 여름 방학 3개월 동안 이전 Burroughs 머신에 ALGOL 58을 구현한 적이 있으며 컨설턴트로 B5000 설계에 지엽적으로 관여하고 있었습니다.많은 사람들이 고급 언어가 어셈블러와 같은 힘을 가질 수 없다고 잘못 생각하여 시스템 프로그래밍 언어로서의 ALGOL의 가능성을 깨닫지 못하면서 ALGOL을 무시했다.

Burroughs ALGOL 컴파일러는 매우 빨랐습니다.네덜란드 과학자 Edsger Dijkstra가 B5000 Pasadena 공장에서 컴파일할 프로그램을 제출했을 때 깊은 인상을 받았습니다.그의 카드 덱은 거의 즉시 편집되었고 그는 즉시 그의 대학인 네덜란드의 에인트호벤 공과대학에 사용할 여러 대의 기계를 원했다.컴파일러는 몇 가지 이유로 빠릅니다만, 주된 이유는 원패스 컴파일러였기 때문입니다.초기 컴퓨터는 소스 코드를 저장하기에 충분한 메모리가 없었기 때문에 컴파일러(그리고 어셈블러)는 보통 소스 코드를 두 번 이상 읽어야 했습니다.Burroughs ALGOL 구문은 공식 언어와 달리 각 변수(또는 다른 개체)를 사용하기 전에 선언해야 하므로 데이터를 읽는 ALGOL 컴파일러를 한 번만 작성할 수 있습니다.이 개념은 이론적으로 깊은 의미를 가지지만 매우 빠른 컴파일도 가능하게 합니다.Burroughs 대형 시스템은 펀치된 카드에서 소스 코드를 읽을 수 있는 만큼 빠르게 컴파일할 수 있었고, 업계에서 가장 빠른 카드 리더를 가지고 있었습니다.

강력한 Burroughs COBOL 컴파일러 또한 원패스 컴파일러였고 똑같이 빨랐다.1000 카드/분 리더가 코드를 읽을 수 있는 속도만큼 빠르게 컴파일된 4000 카드 COBOL 프로그램.그 프로그램은 카드가 판독기를 통과하자마자 사용할 준비가 되어 있었다.

그림 4.5 참고 자료의 ACM Monograph에서 확인엘리엇 오가닉 1973년

B6500 및 B7500

B6500[7](1969년 납품[8][9])과 B7500은 Burroughs 시스템 중 유일하게 오늘날까지 살아남은 컴퓨터입니다.B5000에서 영감을 얻었지만 완전히 새로운 아키텍처를 가지고 있었습니다.가장 중요한 차이점 중 하나는

  • B6500은 12비트 음절의 고정 길이 명령이 아닌 8비트 음절의 가변 길이 명령이 있었습니다.
  • B6500은 48비트 워드가 아닌 51비트를[NB 3] 사용하여 태그로 3비트를 사용했습니다.
  • B6500은 SMP(Symmetric Multiprocessing)를 탑재했습니다.
  • B6500에는 Saguaro 스택이 탑재되어 있습니다.
  • B6500은 페이지 접속이 끝난 어레이입니다.
  • B6500에는 외부 블록의 변수에 네스트된 서브루틴이 액세스할 수 있도록 D1 ~ D32 디스플레이 레지스터가 있습니다.
  • B6500은 자기 박막 [8]메모리를 갖춘 일체형 집적회로를 사용했습니다.

B6700 및 B7700

다른 [10]고객들 중에는 1971년 뉴질랜드의 5개 대학이 있었다.

B8500

B8500[1][2] 라인은 B5000에서 영감을 얻은 군사용 컴퓨터인 D825에서 [11]파생되었습니다.

B8500은 1960년대에 B5500과 D825 디자인을 통합하기 위해 설계되었습니다.시스템은 자기 박막 메모리를 갖춘 모노리식 집적회로를 사용했습니다.이 아키텍처는 B5500과 같은 48비트 워드, 스택 및 디스크립터를 사용했지만, 상향 [1]호환성이 있다고 선전하지는 않았습니다.B8500은 결코 안정적으로 작동할 수 없었고 1970년 이후 프로젝트가 취소되어 완성된 시스템을 [2]납품한 적이 없었습니다.

역사

가상 메모리의 중심 개념은 Feranti Atlas와 Rice Institute Computer의 디자인에 등장했고, 설명자와 태그가 달린 아키텍처의 중심 개념은 1950년대 후반 Rice Institute[12] Computer의 디자인에 등장했습니다.그러나 이러한 디자인이 Burroughs에 직접적인 영향을 미쳤다고 해도 B5000, B6500, B8500의 건축물은 Atlas 및 Rice 기계와 매우 달랐습니다.또한 서로 매우 다릅니다.

Burroughs의 첫 번째 대형 시스템은 B5000이었습니다.1961년에 설계된 이 컴퓨터는 이산 트랜지스터 로직과 자기 코어 메모리를 사용2세대 컴퓨터였다.B5000 아키텍처를 대체하는 최초의 기계는 B6500과 B7500이었습니다.이후 25년간 하드웨어 개발 트렌드에 따라 B5500, B6500, B5700, B6700, B7700, B6800, B7800, Burroughs A 시리즈를 사용하여 아키텍처를 새로운 로직으로 재실장했습니다.Burroughs가 Sperry Corporation을 인수하여 Unisys로 이름을 바꾼 후, 회사는 MCP CMOS ASIC를 기반으로 새로운 기계를 계속 개발했습니다.이 기계들은 천칭자리 100부터 천칭자리 500까지이며, 2005년에 천칭자리 590이 발표되었습니다.이후 590을 포함한 Libras는 인텔 Xeon 프로세서를 탑재하여 MCP CMOS 프로세서뿐만 아니라 에뮬레이션으로 Burroughs 대형 시스템 아키텍처를 실행할 수 있습니다.유니시스가 새로운 MCP CMOS ASIC 개발을 계속할지는 불투명하다.

버로스 (1961년-1986년)
B5000 1961 초기 시스템, 2세대(트랜지스터) 컴퓨터
B5500 1964 3배의 속도[2][13] 향상
B6500 1969 3세대 컴퓨터(집적회로), 최대 4개의 프로세서
B5700 1971 B5500의[disputed ] 새 이름
B6700 1971 B6500의[disputed ] 새로운 이름/버그 수정
B7700 1972 1개 또는 2개의 파티션에 최대 8개의 요청기(I/O 또는 Central 프로세서)를 탑재할 수 있습니다.
B6800 1977? 반도체 메모리, NUMA 아키텍처
B7800 1977? 1개 또는 2개의 파티션에 최대 8개의 요청기(I/O 또는 Central 프로세서)를 탑재할 수 있습니다.
B5900 1980? 반도체 메모리, NUMA 아키텍처.로컬 메모리 및 공통 글로벌 메모리 II에 바인드된 최대 4개의 B5900 CPU(tm)
B6900 1979? 반도체 메모리, NUMA 아키텍처.로컬 메모리 및 공통 글로벌 메모리에 바인드된 최대 4개의 B6900 CPU(tm)
B7900 1982? 반도체 메모리, 고속화, 코드 및 데이터 캐시, NUMA 아키텍처,

1-2개의 HDU(I/O), 1-2개의 AP, 1-4개의 CPU, NUMA 메모리의 소프트 구현으로 CPU를 메모리 공간에서 메모리 공간으로 이동할 수 있었습니다.

A9/A10 1984 B6000 클래스, 미드레인지 최초의 파이프라인 프로세서, 싱글 CPU(A10에서는 듀얼), eMode 베타(확장 메모리 어드레싱)를 지원하는 최초의 프로세서
A12/A15 1985 B7000 클래스, 커스텀 설계의 Motorola ECL MCA1, MCA2 게이트 어레이에 재실장, 싱글 CPU 싱글 HDU (A12) 1~4 CPU, 1~2 HDU (A15)
유니시스 (1986년 ~ 현재)
마이크로 A 1989 싱글 칩[14][15] SCAMP 프로세서를 탑재한 데스크탑 「메인 프레임」.
클리어 패스 HMP NX 4000 1996? 무슨 일입니까?[16][17]
클리어 패스 HMP NX 5000 1996? 무슨 일입니까?[16][17]
클리어 패스 HMP LX 5000 1998 Burroughs 구현 대규모 시스템만 에뮬레이션([18]Xeon 프로세서)
천칭자리 100 2002? ??
천칭자리 200 200? ??
천칭자리 300 200? ??
천칭자리 400 200? ??
천칭자리 500 2005? 예: 천칭자리 595[19]
천칭자리 600 2006? ??
천칭자리 700 2010 예: 천칭자리[20] 750

주요 하드웨어 라인

하드웨어 및 소프트웨어 설계, 개발 및 제조는 캘리포니아 오렌지 카운티필라델피아 외곽의 두 주요 거점으로 나뉘어 있었습니다.B5000과 B5500을 개발한 최초의 Large Systems Plant는 캘리포니아 Pasadena에 있었지만 캘리포니아 City of Industry로 이전하여 B6500을 개발했습니다.Orange County 지점은 캘리포니아미션 비에호에 있는 공장에 근거지를 두고 있었지만, 때로는 인근 어바인과 레이크 포레스트에 있는 시설도 포함되었던 반면, 더 작은 B6x00 라인은 펜실베니아 주 트레디프린에 기반을 둔 동해안 사업장이 더 큰 B7x00 라인을 담당했습니다.양쪽 라인의 모든 머신은 완전히 오브젝트 호환성이 있으며, 이는 한 라인에서 컴파일된 프로그램을 다른 라인에서 실행할 수 있음을 의미합니다.신형 및 대형 모델에는 구형 및 저속 모델에서는 지원되지 않는 명령이 있었지만 하드웨어는 인식되지 않는 명령이 발생하면 이를 해석하는 운영 체제 기능을 호출했습니다.다른 차이점으로는 프로세스 스위칭 및 I/O 처리 방법, 유지보수 및 콜드 스타트 기능 등이 있습니다.대규모 시스템에는 하드웨어 프로세스 스케줄링, 보다 뛰어난 입출력 모듈 및 보다 고기능의 유지보수 프로세서가 포함되어 있습니다.Bxx00 모델이 A 시리즈 모델로 대체되었을 때, 차이는 유지되었지만 모델 번호로는 더 이상 쉽게 식별할 수 없었습니다.

인식하다

버로스 알골
패러다임멀티패러다임: 절차적, 필수적, 구조화
가족인식하다
설계자존 맥클린톡, 기타
개발자버로우즈
처음 등장한1962년; 60년 전 (연방)
플랫폼Burroughs 대형 시스템
OS버로우즈 MCP
영향을 받다
알골 60
영향받은
ESPOL, MCP, NEWP

Burroughs 대형 시스템은 ALGOL에서 파생된 스택 아키텍처를 구현합니다.B5000은 최초의 스택 기반 시스템입니다.

B5000은 ALGOL을 지원하도록 특별히 설계되어 있지만 이는 시작에 불과했습니다.COBOL과 같은 다른 비즈니스 지향 언어들도 잘 지원되었으며, 특히 고속 컴파일러 개발을 위해 포함된 강력한 문자열 연산자들에 의해 가장 두드러졌다.

B5000에서 사용되는 ALGOL은 확장 ALGOL 서브셋입니다.강력한 문자열 조작 명령이 포함되어 있지만 특정 ALGOL 구성체, 특히 지정되지 않은 형식 매개 변수는 제외됩니다.DEFINE 메커니즘은 C에 있는 #defines와 같은 목적으로 기능하지만 프리프로세서가 아닌 언어에 완전히 통합되어 있습니다.EVENT 데이터 유형은 프로세스 간의 조정을 용이하게 하며 ON FAULT 블록은 프로그램 결함 처리를 가능하게 합니다.

ALGOL 사용자 레벨에는 운영체제시스템 및 기타 시스템소프트웨어에 필요한 안전하지 않은 구조가 많이 포함되어 있지 않습니다.MCP 및 밀접하게 관련된 소프트웨어를 기술하기 위한 ESPOL과 NEWP, 특정 종류의 시스템소프트웨어에 보다 구체적인 확장을 제공하기 위한 DCALGOL과 DDALGOL의 2가지 언어 확장 레벨이 추가되어 있습니다.

ESPOL 및 NEWP

원래 B5000 MCP 운영체제는 ESPOL(Executive Systems Programming Oriented Language)이라고 불리는 확장 ALGOL의 확장판으로 작성되었습니다.이것은 70년대 중후반 NEWP라는 언어로 대체되었다.NEWP는 아마도 "새로운 프로그래밍 언어"를 의미했을 뿐이지만, 전설이 그 이름을 둘러싸고 있습니다.당시 버로즈 내의 흔한 (아마도 외설적인) 이야기는 "No Executive Washroom Privileges"에서 나온 것이라고 시사했다.또 다른 이야기는 1976년경 버로우스의 존 맥클린톡(NewP를 개발하는 소프트웨어 엔지니어)이 다시 "아직 이름이 있나요?"라는 질문을 받은 후 "NEWP"라는 이름을 지었다는 것입니다. 그는 "yoooop"이라고 대답했고, 그는 그것을 이름으로 받아들였습니다.NEWP도 서브셋 ALGOL 확장이었지만 ESPOL보다 안전성이 높아 ALGOL의 복잡성이 거의 사용되지 않았습니다.실제로 이들 명령을 허용하도록 특별히 블록이 표시되지 않는 한 모든 안전하지 않은 구조는 NEWP 컴파일러에 의해 거부됩니다.이러한 블록 마킹은 다단계 보호 메커니즘을 제공합니다.

안전하지 않은 구조를 포함하는 NEWP 프로그램은 처음에는 실행할 수 없습니다.시스템의 보안 관리자는 이러한 프로그램을 "bless"하여 실행 가능하게 만들 수 있지만 일반 사용자는 이를 수행할 수 없습니다(일반적으로 루트 권한을 가진 "특권 사용자"도 사이트에서 선택한 구성에 따라서는 이 작업을 수행할 수 없습니다).NEWP는 일반적인 프로그램 작성에 사용할 수 있으며 대규모 소프트웨어 프로젝트용으로 설계된 많은 기능을 갖추고 있지만 ALGOL의 모든 기능을 지원하는 것은 아닙니다.

NEWP에는 이름 있는 인터페이스(기능 및 데이터), 인터페이스 그룹, 모듈 및 슈퍼 모듈 등 운영체제시스템 등의 대규모 소프트웨어 프로젝트를 가능하게 하는 다수의 기능이 있습니다.모듈은 데이터와 기능을 그룹화하여 모듈 내에서 글로벌하게 데이터에 쉽게 액세스할 수 있도록 합니다.인터페이스를 통해 모듈은 함수 및 데이터를 Import 및 내보낼 수 있습니다.슈퍼 모듈에서는 모듈을 그룹화할 수 있습니다.

DCALGOL 및 메시지 제어 시스템(MCS)

운영체제 코드(NEWP)와 사용자 프로그램(ALGOL) 사이의 두 번째 중간 수준의 보안은 DCALGOL(데이터 통신 ALGOL)로 작성된 미들웨어 프로그램용입니다.이것은 입력 큐에서 메시지를 삭제하고 시스템 내의 다른 프로세스가 처리할 수 있도록 큐에 배치하는 메시지 수신 및 디스패치에 사용됩니다.COMS 등의 미들웨어(1984년경 도입)는 네트워크 전체에서 메시지를 수신하여 이러한 메시지를 특정 처리 프로세스 또는 CANDE 등의 MCS(메시지 제어 시스템)에 디스패치합니다.

MCS는 주의할 필요가 있는 소프트웨어 항목입니다.단일 MCS 스택을 다수의 사용자가 공유할 수 있기 때문에 사용자별 프로세스를 실행할 필요 없이 사용자 세션을 제어하고 사용자 상태를 추적할 수 있습니다.로드 밸런싱은 MCS 레벨에서도 실행할 수 있습니다.예를 들어 스택당 30명의 사용자를 처리하는 경우 31~60명의 사용자가 있는 경우 61~90명의 사용자, 3개의 스택 등 2개의 스택이 있습니다.이것에 의해, 다른 유저 프로세스를 기동해, 유저가 시스템에 접속할 때마다 새로운 스택을 작성할 필요가 없어지기 때문에, B5000 머신의 서버 퍼포먼스가 크게 향상됩니다.따라서 MCS를 사용하여 (상태의 유무에 관계없이) 사용자에게 효율적으로 서비스를 제공할 수 있습니다.MCS는 대규모 트랜잭션 처리의 백본도 제공합니다.

MCS는 외부 보조 프로세서인 DCP(Datacomm Control Processor)와 통신했습니다.이 제품은 기존의 레지스터 아키텍처와 수천 대의 원격 터미널을 처리하는 하드웨어 I/O 기능을 갖춘 24비트 미니 컴퓨터였습니다.DCP와 B6500은 메모리의 메시지로 통신하고, 기본적으로는 현재의 용어로 패킷으로 통신하고, MCS는 이러한 메시지의 B6500측 처리를 실시했습니다.초기 몇 년 동안 DCP는 어셈블러(Dacoma)를 가지고 있었습니다.이것은 DCProgen이라고 불리는 어플리케이션 프로그램으로 B6500 ALGOL로 작성되었습니다.나중에 NDL(Network Definition Language) 컴파일러는 DCP 코드와 NDF(Network Definition File)를 생성했습니다.각 종류의 DCP 명령에는 ALGOL 함수가 1개씩 존재하며, 이 함수를 호출하면 대응하는 DCP 명령 비트가 출력으로 출력됩니다.DCP 프로그램은 어셈블리 언어 문마다 하나씩 이들 함수에 대한 긴 호출 목록만 포함하는 ALGOL 프로그램입니다.기본적으로 ALGOL은 매크로 어셈블러의 매크로 패스처럼 동작합니다.첫 번째 패스는 ALGOL 컴파일러입니다.두 번째 패스는 결과적으로 (B6500 상에서) DCP용 바이너리를 내보내는 프로그램입니다.

DMALGOL 및 데이터베이스

ALGOL의 또 다른 변종은 DDMALGOL(Data Management ALGOL)입니다.DMALGOL은 DASDL(Data Access and Structure Definition Language) 컴파일러에 의해 작성된 데이터베이스 기술 파일에서 DMSII 데이터베이스 소프트웨어를 컴파일하기 위한 확장 버전입니다.데이터베이스 설계자와 관리자는 데이터베이스 설명을 컴파일하여 지정된 테이블 및 인덱스에 맞게 조정된 DMALGOL 코드를 생성합니다.관리자가 직접 DMALGOL을 쓸 필요는 없습니다.일반 사용자 레벨 프로그램은 데이터베이스 명령 및 트랜잭션 처리 지시와 함께 확장된 애플리케이션 언어(주로 ALGOL 및 COBOL)로 작성된 코드를 사용하여 데이터베이스 액세스를 얻습니다.DMALGOL의 가장 주목할 만한 기능은 테이블과 인덱스를 처리하기 위한 코드를 생성하는 전처리 메커니즘입니다.

DMALGOL 전처리는 변수와 루프를 포함하며 컴파일 시간 변수에 따라 이름을 생성할 수 있습니다.이것에 의해, 루프가 부족한 설비의 전처리보다 훨씬 더 많은 커스터마이징이 가능하게 됩니다.

DMALGOL은 DMSII 데이터베이스에 대한 맞춤형 액세스 루틴을 제공하기 위해 사용됩니다.Data Access and Structure Definition Language(DASDL; 데이터 액세스 및 구조 정의 언어)를 사용하여 데이터베이스를 정의한 후 프리프로세서에 의해 스키마가 맞춤형 DMALGOL 액세스 루틴으로 변환되어 컴파일됩니다.즉, 다른 DBMS 구현과 달리 런타임에 데이터베이스 고유의 if/then/else 코드가 필요하지 않습니다.1970년대에는 코드 풋프린트와 실행 시간을 줄이기 위해 이 "맞춤"이 매우 광범위하게 사용되었습니다.메모리 및 속도에 대한 낮은 수준의 미세 튜닝이 덜 중요해지고, 부분적으로는 전처리를 제거함으로써 코딩이 간소화되어 더 중요한 최적화가 가능해졌기 때문에 이후 몇 년 동안 이 기술은 훨씬 덜 쓰이게 되었습니다.DMALGOL은 "find", "lock", "store"와 같은 동사를 포함했다.또한 "begintransaction"과 "end transaction" 동사도 포함되었으며, 여러 프로세스가 동일한 구조에 액세스하여 업데이트했을 때의 교착 상태를 해결했습니다.

Burroughs의 Roy Guck은 DMSII의 주요 개발자들 중 한 명이었다.

이후 컴파일러 코드 크기가 문제가 되지 않게 되면서 대부분의 전처리 구조물은 ALGOL 사용자 수준에서 사용할 수 있게 되었습니다. 안전하지 않은 구조물과 데이터베이스 기술 파일의 직접 처리만 DMALGOL로 제한됩니다.

스택 아키텍처

많은 초기 시스템과 언어에서 프로그래머들은 종종 그들의 루틴을 너무 작게 만들지 말라는 말을 들었다.스택을 유지하기 위해 많은 작업을 수행해야 했기 때문에 프로시저 호출 및 반환 비용이 많이 들었습니다.B5000은 스택 머신으로 설계되어 어레이(문자열 및 객체 포함)를 제외한 모든 프로그램 데이터가 스택에 보관되었습니다.즉, 스택 운영이 효율성을 위해 최적화되었음을 의미합니다.스택 지향 머신으로서 프로그래머의 주소 지정 가능한 레지스터는 없습니다.

멀티태스킹은 B5000 및 B6500 라인에서도 매우 효율적입니다.프로세스 스위치를 실행하는 순서는 다음과 같습니다.

B5000, B5500, B5700
P1(IP1) 및 P2(IP2)[5]: 6–30 의 개시
B6500, B7500 및 후속 제품
MVST(Move Stack).[7]: 8–19 [21]

각 스택 및 관련[NB 4] 프로그램 참조 테이블(PRT)은 프로세스(태스크 또는 스레드)를 나타내며 태스크는 리소스 요청을 기다리는 동안 차단될 수 있습니다(프리엠프티브 멀티태스킹으로 인해 태스크가 중단된 경우 프로세서가 실행되기를 기다리는 것도 포함).사용자 프로그램은 IP1,[NB 4] IP2[NB 4], 또는 MVST를 [NB 5]발행할 수 없습니다.이 작업을 수행하는 운영체제는 1곳뿐입니다.

따라서 프로세스 스위치는 다음과 같이 진행됩니다. 즉, 즉시 사용할 수 없는 리소스를 요구하거나, 현재 메모리에 없는 블록에서 파일을 읽거나, 시스템 타이머가 인터럽트를 트리거했을 수 있습니다.OS 코드가 입력되어 사용자 스택 위에서 실행됩니다.사용자 프로세스 타이머가 꺼집니다.현재 프로세스는 요청된 리소스에 적합한 큐에 배치되어 있습니다.또는 프리엠프티브콘텍스트스위치일 경우 프로세서를 대기하고 있는 대기 큐에 배치됩니다.운영체제는 ready 큐의 첫 번째 프로세스를 결정하고 명령 move_stack을 호출합니다.이 명령어는 ready 큐의 선두에 있는 프로세스를 액티브하게 합니다.

스택 속도와 퍼포먼스

스택 성능은 레지스터 기반 아키텍처에 비해 느린 것으로 간주되었습니다. 예를 들어, 이러한 아키텍처는 System/[22]360에 대해 검토되어 거부되었습니다.시스템 속도를 높이는 방법 중 하나는 데이터를 가능한 한 프로세서에 가깝게 유지하는 것입니다.B5000 스택에서는 스택의 상위2개의 위치를 2개의 레지스터 A와 B에 할당함으로써 이 처리를 실시했습니다.대부분의 조작은 이들 2개의 탑 오브 스택위치로 실행됩니다.B5000보다 고속의 머신에서는, 보다 많은 스택을 프로세서 부근의 레지스터 또는 캐시에 보존할 수 있습니다.

따라서 현재 B5000 시스템의 후계기 설계자는 최신 기술을 모두 최적화할 수 있으며 프로그래머는 코드를 조정하지 않고 재컴파일할 필요도 없기 때문에 소프트웨어 투자를 보호할 수 있습니다.일부 프로그램은 많은 CPU 업그레이드에서 수년간 실행되고 있는 것으로 알려져 있습니다.이러한 속도 향상은 레지스터 기반 [citation needed]기계에서는 제한됩니다.

RISC 설계자가 추진한 속도의 또 다른 포인트는 모든 것이 1개의 칩으로 이루어지면 프로세서 속도가 상당히 빨라진다는 것입니다.1970년대 B5000과 같은 복잡한 아키텍처에서는 하나의 칩에 너무 많은 트랜지스터가 필요했습니다.그러나 현재는 그렇지 않으며 모든 B5000 후속 머신은 캐시 및 명령 파이프라인과 같은 성능 지원 기술뿐만 아니라 단일 칩에도 적합합니다.

실제로 B5000 후계기 A시리즈 라인에는 최초의 싱글 칩 메인프레임인 1980년대 후반의 Micro-A가 포함되어 있었습니다.이 메인프레임 칩(싱글칩 A 시리즈 메인프레임 프로세서의 SCAMP)은 인텔 기반의 플러그인 PC 보드에 탑재되어 있습니다.

프로그램이 스택에 매핑되는 방법

다음은 프로그램이 스택 구조에 매핑되는 방법의 예입니다.

       begin — — — — — — — — — — - - - - - - - - - - - - - icalical 2 22 입니다(레벨0은 운영체제시스템용으로 예약되어 있고 레벨1은 코드 세그먼트용으로 예약되어 있습니다).-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------integeri, j, k; realf, g; arraya [ 0 : 9 ]; procedurep ( realp1, p2); valuep1; - p1은 값에 의해 전달되고 p2는 참조에 의해 암묵적으로 전달됩니다.begin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 。이 블록은 어휘 레벨3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
r2 : = p1 * 5 ; p2 : = r2 ; : g 를 r2p1 : = r2 의 값으로 설정합니다.이것에 의해, p1 의 f 의 원래의 값이 덮어쓰게 되므로, 부호화의 실수일 가능성이 있습니다.따라서 ALGOL의 후계자 중 일부에서는 값 파라미터는 읽기 전용이지만 대부분은 읽지 않습니다.ifr2 > 10thenbegin - - - - - - - - - - - - - - - - 여기서 선언된 변수는 이 렉시컬레벨 4 - - - - - - - 을 만듭니다.— — — — — 정수 n;
: 변수를 선언하면 블록이 되고 스택 구축 코드가 호출됩니다.보통 여기서 변수를 선언하지 않습니다.이 경우 블록이 아닌 복합문입니다.<== 샘플 스택이 이곳 어딘가에서 실행되고 있습니다.end; end; ....p (f, g); end.

각 스택 프레임은 현재 실행 환경의 어휘 수준에 대응합니다.보시는 바와 같이 어휘 레벨은 프로그램의 스태틱텍스트 네스트입니다다이나믹콜 네스트가 아닙니다.싱글패스 컴파일러용으로 설계된 언어인 ALGOL의 가시성 규칙은 현재 위치 앞에 선언된 변수만 코드의 해당 부분에 표시된다는 것을 의미하며, 따라서 포워드 선언이 필요합니다.둘러싸인 블록으로 선언된 모든 변수가 표시됩니다.또 다른 경우로는 같은 이름의 변수가 내부 블록으로 선언되어 외부 변수에 액세스할 수 없게 되는 것을 효과적으로 숨길 수 있습니다.

어휘 네스팅은 정적이며 재귀 등에 의한 실행 네스팅과는 무관하기 때문에 5단계 이상의 깊이에서 네스트된 프로시저를 찾는 것은 매우 드물며, 이러한 프로그램들이 제대로 구조화되지 않을 것이라는 주장이 제기될 수 있다.B5000 머신은 최대 32레벨까지 네스트 할 수 있습니다.생성 방식이 프로시저 내에서 프로시저를 자주 중첩하는 경우 출력으로 Algol 소스를 생성한 일부 시스템에서 문제가 발생할 수 있습니다.

절차들

순서는 normal, call, process, run의 4가지 방법으로 호출할 수 있습니다.

통상 호출에서는 호출된 프로시저가 반환될 때까지 호출 루틴을 일시 정지함으로써 모든 언어가 루틴을 호출하는 통상적인 방법으로 프로시저를 호출합니다.

메커니즘은 Coroutine으로서 프로시저를 호출합니다.코루틴에는 CONTINUE 명령을 통해 작업 간에 제어가 명시적으로 전달되는 파트너 작업이 있습니다.이것들은 동기 프로세스입니다.

프로세스 메커니즘은 프로시저를 비동기 태스크로 호출하며, 이 경우 처리된 프로시저의 사전 수준에서 시작하여 별도의 스택이 설정됩니다.비동기 태스크로서 코루틴과 달리 태스크 간에 제어가 전달되는 시기를 정확하게 제어할 수 없습니다.이 처리 절차에서는 여전히 폐쇄 환경에 액세스할 수 있으며 이는 매우 효율적인 IPC(Inter Process Communication) 메커니즘입니다.이제 2개 이상의 태스크가 공통 변수에 액세스할 수 있게 되었으므로 작업을 동기화하여 레이스 조건을 방지해야 합니다. 레이스 조건은 EVENT 데이터 유형에 의해 처리됩니다.이 데이터 유형은 다른 공동 프로세스에 의해 프로세스가 발생할 때까지 이벤트에 대해 대기할 수 있습니다.또한 EVENT를 통해 조달 및 해방 기능을 통해 상호 제외 동기화가 가능합니다.어떤 이유로든 하위 작업이 중단된 경우 호출 작업을 계속할 수 있지만 상위 프로세스가 중단된 경우 모든 하위 프로세스가 자동으로 종료됩니다.복수의 프로세서가 탑재되어 있는 머신에서는, 프로세스가 동시에 실행되는 경우가 있습니다.이 EVENT 메커니즘은 멀티태스킹과 더불어 멀티프로세싱을 가능하게 하는 기본 요소입니다.

호출 유형 실행

마지막 호출 유형이 실행됩니다.그러면 프로시저가 독립된 태스크로 실행되며, 이 태스크는 원래 프로세스가 종료된 후에도 계속할 수 있습니다.따라서 하위 프로세스는 상위 환경의 변수에 액세스할 수 없으며 호출된 프로시저에 전달된 모든 매개 변수는 값별로 호출되어야 합니다.

따라서 Burroughs Extended ALGOL은 Ada와 같은 이후 언어의 다중 처리 및 동기화 기능을 일부 가지고 있었습니다.하드웨어에 내장된 비동기 프로세스의 지원을 활용했습니다.

인라인 프로시저

마지막으로 프로시저가 INLINE으로 선언될 수 있습니다.즉, 컴파일러가 참조를 검출하면 프로시저 호출의 오버헤드를 줄이기 위해 프로시저 코드가 인라인으로 생성됩니다.이것은 작은 코드 조각에 대해 실행하는 것이 가장 좋습니다.인라인 함수는 C #defines 파라미터화된 매크로와 유사하지만 매크로에서 가능한 파라미터에 문제가 발생하지 않습니다.이 기능은 NEWP에서 사용할 수 있습니다.

비동기 콜

예제 프로그램에서는 일반 콜만 사용되므로 모든 정보는 단일 스택에 저장됩니다.비동기 콜의 경우 스택은 여러 스택으로 분할되므로 프로세스는 데이터를 공유하지만 비동기적으로 실행됩니다.

디스플레이 레지스터

스택 하드웨어 최적화는 D(또는 "디스플레이") 레지스터를 제공하는 것입니다.이것들은 각 착신측 스택프레임의 시작을 나타내는 레지스터입니다.이러한 레지스터는 절차가 시작 및 종료될 때 자동으로 업데이트되며 어떤 소프트웨어에서도 액세스할 수 없습니다.32개의 D 레지스터가 있으며, 이는 32개의 레벨의 어휘 중첩을 제한합니다.

어휘 레벨 5(D[5])에서 어휘 레벨 2(D[2]) 글로벌 변수에 액세스하는 방법을 검토합니다.변수가 어휘 수준 2의 베이스에서 6단어 떨어져 있다고 가정합니다.따라서, 주소 커플(2, 6)로 표시됩니다.D 레지스터가 없는 경우 D[5] 프레임의 밑부분에 있는 제어어를 확인해야 합니다.이것은 D[4] 환경을 포함한 프레임을 가리킵니다.그런 다음 이 환경의 기초에 있는 제어어를 살펴보고 D[3] 환경을 찾아 모든 링크를 따라 필요한 어휘 수준으로 돌아갈 때까지 이 방식을 계속합니다.이 패스는 이 포인트에 도달하기 위해 호출된 절차를 통해 돌아가는 리턴 패스와는 다릅니다.(아키텍처는 데이터 스택과 콜스택을 모두 같은 구조로 유지하지만 제어어를 사용하여 구별합니다).

보시다시피 변수에 액세스하는 것만으로는 매우 비효율적입니다.D 레지스터를 사용하면 D[2] 레지스터 포인트는 어휘 레벨2 환경의 베이스에 있습니다.변수 주소를 생성하기 위해 필요한 것은 스택프레임 베이스에서D 레지스터의 프레임베이스 주소로 오프셋을 추가하는 것뿐입니다.(위 방법으로 스택을 검색할 수 있는 효율적인 링크 리스트 검색 연산자 LLLU가 있지만 D 레지스터 접근법은 여전히 더 빠릅니다.)D 레지스터를 사용하면 외부 및 글로벌 환경의 엔티티에 대한 액세스는 로컬 변수 액세스만큼 효율적입니다.

D 태그 데이터: 주소 커플링, 코멘트 레지스터
0n(4, 1) 정수n(프로시저가 아닌 블록에 대한 엔트리) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------======================= 0 r2 (3 , 5 )실제 r2 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3 RCW(3, 1) 리턴 제어워드 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------======================= 1 a (2, 7) 배열 a ====== > [ 10 word memory block ] -----------------------------------------------------------------------------------------------------------------------------------------------------j(2, 3) j 정수 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------======================= — 스택 하단

순서 p를 코루틴 또는 프로세스 명령으로 호출했다면 D[3] 환경은 별도의 D[3] 기반 스택이 되었을 것입니다.즉, 비동기 프로세스가 ALGOL 프로그램코드에 암시된 바와 같이 D[2] 환경에 계속 액세스 할 수 있습니다.한 걸음 더 나아가 완전히 다른 프로그램이 다른 프로그램의 코드를 호출하여 자신의 프로세스 스택 위에 다른 프로세스의 D[2] 환경을 가리키는 D[3] 스택 프레임을 생성할 수 있습니다.코드 실행 환경의 주소 공간 전체가 순식간에 변화하여 자체 프로세스 스택의 D[2] 환경을 직접 주소 지정할 수 없게 되고 대신 다른 프로세스 스택의 D[2] 환경을 직접 주소 지정할 수 있게 됩니다.라이브러리 콜의 실장은 다음과 같습니다.이러한 스택간 콜에서는, 발신 코드와 착신 코드는, 다른 소스 언어로 기술된 프로그램으로부터 발신되어 다른 컴파일러에 의해서 컴파일 되는 경우도 있습니다.

D[1] 및 D[0] 환경은 현재 프로세스의 스택에서 발생하지 않습니다.D[1] 환경은 동일한 코드를 실행하는 모든 프로세스에서 공유되는 코드 세그먼트 사전입니다.D[0] 환경은 운영 체제에서 내보낸 엔티티를 나타냅니다.

스택 프레임은 실제로 프로세스 스택에 존재할 필요가 없습니다.이 기능은 초기에 파일 I/O 최적화에 사용되었으며, FIB(파일 정보 블록)는 I/O 작업 중에 D[1]에 있는 디스플레이 레지스터에 링크되었습니다.90년대 초에 이 기능은 STRUCTURE BLOCKs 및 라이브러리 기술과 결합된 CONNECTION BLOCKs로서 언어 기능으로 구현되었습니다.데이터 구조를 디스플레이 레지스터에 링크하는 기능. 구현된 객체 방향 주소입니다.따라서 B5000은 실제로 이 용어가 사용되기 훨씬 전에 객체 방향의 형태를 사용했습니다.

다른 시스템에서는 컴파일러가 비슷한 방식으로 심볼 테이블을 작성할 수 있지만, 결국 스토리지 요구 사항이 수집되어 머신 코드가 16비트, 32비트, 64비트의 플랫 메모리 주소를 사용하도록 작성됩니다.이러한 주소에는, 잘못된 주소에 기입하면, 어떠한 것이라도 파손될 가능성이 있습니다.대신 하드웨어에 의해 2부분의 주소 방식이 구현되었습니다.각 어휘 수준에서 변수는 수준 스택의 베이스에서 위쪽으로 배치되었으며, 일반적으로 한 단어를 점유했다. 이중 정밀도 또는 복잡한 변수가 두 단어를 점유할 것이다.이 영역에는 어레이가 저장되지 않았습니다.어레이의 설명자는 1개뿐입니다.따라서 각 어휘 수준에서 총 스토리지 요구 사항은 크지 않았습니다. 극단적인 경우 수십, 수백 또는 수천 개에 달하며 32비트 이상을 필요로 하지 않았습니다.실제로 이는 오퍼랜드를 스택에 로드한 VALC 명령(밸류 콜)의 형태로 반영되었습니다.이 op-code는 2비트 길이였고 나머지 바이트 비트는 14비트 주소 지정 필드를 제공하기 위해 다음 바이트와 연결되었습니다.실행되고 있는 코드는, 예를 들면 6의 어느 정도의 어휘 레벨입니다.이는 0에서 6까지의 어휘 레벨만이 유효하다는 것을 의미하며, 따라서 원하는 어휘 레벨을 지정하는 데 필요한 것은 3비트뿐입니다.따라서 VALC 동작의 주소 부분은 그 목적을 위해 3비트만 예약되었으며 나머지는 그 이하의 레벨의 엔티티를 참조하기 위해 사용할 수 있습니다.깊이 중첩된 프로시저(따라서 높은 어휘 수준에서)에서는 엔티티를 식별하기 위해 사용할 수 있는 비트가 적습니다.레벨 16에서는 레벨 0~31의 선택을 지정하기 위해5비트가 필요하기 때문에 어휘 수준의 첫 번째 512개의 엔티티를 식별하기 위해서는9비트밖에 남지 않습니다.이것은 32비트 주소 지정 공간에서 엔티티의 리터럴메모리 주소로 주소를 지정하는 것보다 훨씬 콤팩트합니다.또한 ADD, MULT 등의 데이터를 로드한 VALC opcode만이 어드레싱을 하지 않고 스택의 상위 요소에 대해서만 동작했습니다.

훨씬 더 중요한 것은 이 방법이 플랫 어드레싱을 사용하는 시스템에서 사용 가능한 많은 오류는 기계 코드 수준에서도 간단히 말할 수 없기 때문에 발생할 수 없다는 것을 의미한다는 것입니다.어떤 태스크는 주소를 개발할 방법이 없었기 때문에 다른 태스크에서 사용 중인 메모리를 손상시킬 방법이 없었습니다.지정된 D 레지스터로부터의 오프셋은 하드웨어에 의해 스택프레임 경계에 대해 체크됩니다.부정한 값은 트랩됩니다.마찬가지로 작업 내에서는 어레이 디스크립터에 어레이의 경계에 관한 정보가 포함되어 있기 때문에 하드웨어에 의해 인덱스 처리가 체크되었습니다.즉, 각 어레이는 독자적인 주소 공간을 형성했습니다.어느 경우든 모든 메모리 워드의 태그 부착은 두 번째 수준의 보호를 제공합니다.값의 잘못된 방향 할당은 데이터 보유 위치에만 전달될 수 있으며 포인터나 어레이 기술자 등을 보유하는 위치에는 전달되지 않으며 위치 보유 기계 코드에는 전달되지 않습니다.

어레이 스토리지

배열은 다른 변수와 함께 메모리에 연속적으로 저장되지 않고 각각 디스크립터를 통해 배치된 자체 주소 공간이 할당되었습니다.액세스 메커니즘은 스택 상에서 인덱스 변수(따라서 14비트뿐만 아니라 완전한 정수 범위 전위)를 계산하여 하드웨어에 의해 제공되는 바운드 체크를 통해 어레이의 주소 공간에 오프셋으로 사용하는 것이었습니다.배열의 길이가 1,024 워드를 초과하면 배열이 세그먼트화되어 인덱스가 세그먼트 인덱스로 변환되고 오프셋이 인덱스 세그먼트로 변환됩니다.ALGOL의 경우, 다차원 배열은 이러한 주소 지정의 여러 수준을 사용합니다.A(i,j)에 대한 참조의 경우, 첫 번째 인덱스는 설명자 배열에 포함되며, A의 각 행에 대해 설명자가 하나이고, 단일 차원 배열에 대해 j로 인덱싱되며, 더 높은 차원에 대해서도 마찬가지입니다.모든 어레이 인덱스의 알려진 한계와 비교하여 하드웨어를 검사하면 잘못된 인덱스를 방지할 수 있습니다.

그러나 FORTRAN은 모든 다차원 배열이 같은 크기의 단차원 배열과 동등하다고 간주하며, 다차원 배열의 경우 단일 시퀀스에서 요소 A(i,j,k)가 발견되는 오프셋을 계산하기 위해 단순한 정수 산술이 사용됩니다.1차원 등가 배열은 충분히 크면 ALGOL의 1차원 배열과 같은 방법으로 액세스 할 수 있습니다.이 배열 외부에 대한 액세스는 방지되지만, 한 인덱스의 값이 잘못 결합되어 다른 인덱스의 값이 적절하게 잘못되어도 경계 위반이 발생하지 않을 수 있습니다.gle 시퀀스 배열, 즉 인덱스가 개별적으로 체크되지 않았습니다.

어레이의 스토리지는 다른 아이템의 스토리지에 의해 양쪽으로 한정되지 않았기 때문에 시스템은 어레이의 크기를 조정하기가 쉬웠습니다.다만, 컴파일러는 모든 참조가 같은 수의 치수를 가지는 것이 필요하기 때문에, 치수수의 변경은 할 수 없었습니다.ALGOL의 경우 이를 통해 일반적인 고정 직사각형(또는 고차원) 배열이 아닌 "ragged" 배열이 개발되었습니다.따라서 2차원에서는 너덜너덜한 배열에는 크기가 다른 행이 있습니다.예를 들어 값이 거의 0인 큰 배열 A(100,100)가 있는 경우 SA(100,0)로 선언된 스파스 배열 표현은 각 행의 크기를 조정하여 A의 0이 아닌 값만 포함할 수 있습니다.

1024 워드를 넘는 어레이는 세그먼트화되어 있지만, 실제 메모리가 부족한 시스템에서는, 스크래치 패드 어레이의 표시 사이즈를 1,000에서 1,050으로 늘리는 것으로, 메모리내에 필요한 것은 작은 세그먼트뿐이기 때문에, 이 프로그램은 「스래시」로 동작하지 않게 됩니다.어레이 세그먼트의 실제 스토리지는 해당 세그먼트의 요소에 액세스할 경우에만 런타임에 할당되며 생성된 세그먼트의 모든 요소가 0으로 초기화됩니다.따라서 처음에 배열을 0으로 초기화하지 않는 것이 바람직하지 않은 누락으로 이어집니다.

스택 구조의 이점

스택 구조의 좋은 점은 프로그램에 장애가 발생했을 경우 스택덤프가 실행되어 프로그래머가 실행 중인 프로그램의 상태를 정확하게 파악할 수 있다는 것입니다.이를 다른 시스템의 코어 덤프 및 교환 패키지와 비교해 보십시오.

스택 구조의 또 다른 점은 프로그램이 암묵적으로 재귀적이라는 것입니다.FORTRAN은 재귀를 지원하지 않을 것으로 예상되었으며, 아마도 ALGOL 구현 방법에 대한 사람들의 이해에 걸림돌 중 하나가 재귀 구현 방법이었을 것이다.B5000에서는, 이것은 문제가 되지 않았습니다.실제로, 프로그램의 재귀화를 막는 방법이라는 반대의 문제가 있었습니다.결국 그들은 신경 쓰지 않았다.Burroughs FORTRAN 컴파일러는 (다른 모든 FORTRAN 컴파일러와 마찬가지로) 재귀 호출을 허용했지만 스택 기반 시스템에서는 이러한 호출로부터의 반환도 성공했습니다.이것은 중앙 서브루틴이 돌아오지 않고 반복적으로 서로를 호출하는 수학식을 정식으로 조작하는 시스템과 같이 이상한 영향을 미칠 수 있습니다. 즉, 스택 오버플로에 의해 큰 작업이 종료됩니다.

따라서 Burroughs FORTRAN은 FORTRAN의 [citation needed]다른 동시 구현보다 오류 검사가 더 잘 되었습니다. 예를 들어 서브루틴과 함수에 대해서는 ALGOL 스타일의 컴파일러가 정상적으로 동작하는 것과 같이 올바른 수의 파라미터로 호출되는 것을 확인했습니다.다른 컴퓨터에서는 이러한 불일치가 크래시의 일반적인 원인이었습니다.어레이 바인딩 체크에서도 마찬가지입니다.다른 시스템에서 몇 년 동안 사용되어 온 프로그램이 Burroughs 시스템에서 실행되면 자주 오류가 발생합니다.사실, Burroughs는 객체 지향의 Simula(ALGOL의 슈퍼셋)를 포함한 뛰어난 컴파일러와 언어 구현으로 유명해졌고, APL의 디자이너 Iverson은 Burroughs의 APL 구현이 그가 [citation needed]본 것 중 최고라고 선언했다.LISP 언어 설계자인 John McCarthy는 동의하지 않았습니다.LISP는 수정 가능한[citation needed] 코드를 기반으로 했기 때문에 B5000의[citation needed] 수정 불가능한 코드를 좋아하지 않았지만 대부분의 LISP 구현은 해석적인 환경에서 실행됩니다.

여러 프로세스에 필요한 스토리지는 필요에 따라 시스템의 메모리 풀에서 가져옵니다.작업을 실행하는 메모리 파티션을 미리 구성하기 위해 Burroughs 시스템과 마찬가지로 SYSGEN을 실행할 필요가 없었습니다.

태그 부착 아키텍처

B5000의 가장 명확한 점은 위와 같은 스택머신이라는 점입니다.그러나 아키텍처의 다른 두 가지 매우 중요한 기능은 태그 기반과 디스크립터 기반이라는 것입니다.

원래의 B5000에서는 제어단어 또는 숫자단어로 식별하기 위해 각 제어단어 또는 숫자단어[NB 6] 내의 플래그비트를 따로 두었다.이는 부분적으로 프로그램이 스택 상의 제어 워드를 손상시키는 것을 막기 위한 보안 메커니즘이었습니다.

나중에 B6500이 설계되었을 때, 1비트 제어 워드/숫자 구별이 강력한 아이디어라는 것을 깨달았고, 이는 태그에 48비트 워드 이외의 3비트로 확장되었습니다.데이터 비트는 비트 0 ~47이며 태그는 비트 48 ~50입니다비트 48은 읽기 전용 비트였기 때문에 홀수 태그는 사용자 수준 프로그램에서 쓸 수 없는 제어 단어를 나타냅니다.암호 단어에는 태그 3이 지정되었습니다.다음은 태그와 그 기능의 목록입니다.

태그 단어 종류 묘사
0 데이터. 모든 종류의 사용자 및 시스템 데이터(텍스트 데이터 및 단일 정밀도 수치)
2 이중 이중 정밀도 데이터
4 SIW 스텝 인덱스 워드(루프에서 사용)
6 초기화되지 않은 데이터
SCW Software Control Word(스택을 줄이기 위해 사용)
1 IRW 간접 참조어
시루 삽입된 간접 참조어
3 코드 프로그램 코드워드
MSCW 스택 제어 단어 표시
RCW Return Control Word(반환 제어 워드)
TOSCW 스택 제어 단어 맨 위
SD 세그먼트 기술자
5 디스크립터 데이터 블록 기술자
7 PCW 프로그램 제어 단어

내부적으로는 60비트 워드를 가진 머신도 있었고, 여분의 비트는 Hamming 코드 오류 수정 필드 등의 엔지니어링 목적으로 사용되었지만, 프로그래머에게는 전혀 보이지 않았습니다.

이러한 머신의 현재 형태인 Unisys ClearPath에는 4비트 태그로 확장된 태그가 있습니다.4개의 비트 태그를 지정한 마이크로코드레벨은 레벨 감마라고 불립니다

짝수 태그 부착 워드는 사용자 프로그램으로 사용자 상태로 변경할 수 있는 사용자 데이터입니다.홀수 태그가 달린 단어는 하드웨어에 의해 직접 생성되어 사용되며 프로그램의 실행 상태를 나타냅니다.이러한 워드는 특정 명령 또는 하드웨어에 의해 생성 및 소비되므로 하드웨어 구현과 사용자 프로그램 간에 정확한 포맷을 변경할 필요가 없습니다.이는 시스템 워드 형식이 변경되더라도 동일한 코드 스트림이 동일한 결과를 생성하기 때문입니다.

태그 1 단어는 온스택 데이터 주소를 나타냅니다.통상의 IRW에서는, 현재의 스택상의 데이터에 주소 페어를 격납합니다.SIRW는 주소에 스택 번호를 포함하여 임의의 스택 상의 데이터를 참조합니다.

태그 5 단어는 기술자입니다.자세한 내용은 다음 섹션에서 설명합니다.태그 5 단어는 스택 외 데이터 주소를 나타냅니다.

태그 7은 절차 진입점을 설명하는 프로그램 제어 단어입니다.오퍼레이터가 PCW에 히트하면 절차가 입력됩니다.ENT 연산자는 명시적으로 프로시저를 입력합니다(비값 반환 루틴).함수(값 반환 루틴)는 Value Call(VALC; 값 호출) 등의 연산자에 의해 암묵적으로 입력됩니다.글로벌 루틴은 D[1] 환경에서 코드 세그먼트 사전에 저장된 PCW를 가리키는 SIRW로 D[2] 환경에 저장됩니다.D[1] 환경은 이 코드를 공유하는 모든 프로세스에서 참조할 수 있으므로 현재 스택에 저장되지 않습니다.따라서 코드가 재입력되어 공유됩니다.

태그 3은 코드 워드 자체를 나타내며 스택에서는 발생하지 않습니다.태그 3은 스택 제어 단어 MSCW, RCW, TOSCW에도 사용됩니다.

그림 9.2 참고 자료의 ACM Monograph에서 확인엘리엇 오가닉 1973년

기술자 기반 아키텍처

왼쪽 그림은 Burroughs Large System 아키텍처가 객체 지향 프로그래밍을 위한 하드웨어 아키텍처였다는 것을 보여줍니다.이것은 기존 아키텍처에는 아직 존재하지 않는 것입니다.

명령어 세트

Burroughs 대형 시스템에는 세 가지 명령 집합이 있습니다.세 가지 모두 단어에 고르게 맞는 짧은 음절에 기반을 두고 있다.

B5000, B5500 및 B5700

B5000, B5500, B5700의 프로그램은 12비트 음절로 구성되어 있습니다.이 아키텍처는 워드 모드와 문자 모드 두 가지 모드가 있으며 각각 다른 음절 레퍼토리를 가지고 있습니다.프로세서는 Control State 또는 Normal State 중 하나이며 특정 음절은 Control State에서만 허용됩니다.이 아키텍처에서는 레지스터 또는 스토리지에 직접 주소를 지정할 수 없습니다.모든 참조는 1024 워드의 Program Reference Table, 현재 코드 세그먼트, 스택 내의 마크된 위치 또는 스택 상의 상위 2개의 위치를 유지하는A 및 B 레지스터를 통해 이루어집니다.0(하이 비트) ~ 11(로우 비트)의 음절 비트 수

B6500, B7500 및 후속 제품

프로그램은 8비트 음절로 구성되며 Name Call, Value Call 또는 연산자를 형성할 수 있으며 길이는 1 ~12글자입니다연산자는 200명 미만이며 모두 8비트 음절에 해당합니다.이러한 연산자의 대부분은 태그에 의해 주어진 동작의 대상이 되는 데이터의 종류에 따라 다형성이 됩니다.강력한 문자열 스캔, 전송 및 편집 연산자를 무시하면 기본 세트는 약 120개의 연산자에 불과합니다.MVST나 HALT 등의 운영체제용으로 예약된 연산자를 삭제하면 사용자 레벨의 프로그램에서 일반적으로 사용되는 연산자 세트는 100 미만입니다.Name Call 음절과 Value Call 음절에는 주소 쌍이 포함되어 있습니다.Operator 음절에는 주소를 사용하지 않거나 스택 상의 제어어와 디스크립터를 사용합니다.

다중 프로세서

B5000 라인은, 고속 버스에 복수의 프로세서를 접속하는 선구자이기도 했습니다.B7000 라인은 최대 8개의 프로세서를 탑재할 수 있습니다.단, 1개 이상의 프로세서가 I/O모듈이면 됩니다.RDLK는 프로세서 간의 동기화가 매우 낮은 수준입니다.사용자 프로그램에서 사용되는 상위 수준은 EVENT 데이터 유형입니다.EVENT 데이터 유형에는 약간의 시스템 오버헤드가 있습니다.이러한 오버헤드를 피하기 위해 Dahm Locks(Burroughs 소프트웨어 전문가인 Dave Dahm의 이름을 딴 Dahm 잠금 장치)라는 특수 잠금 기술을 사용할 수 있습니다.

주목할 연산자는 다음과 같습니다.

HEYU - 다른 프로세서에 인터럽트 전송
RDLK — 하위 레벨 세마포 연산자: A 레지스터에서 지정된 메모리 위치에 A 레지스터를 로드하고 해당 메모리 위치에 있는 B 레지스터에 값을 단일 무정전 사이클로 배치합니다.알골 컴파일러는 특정 함수를 통해 이 연산자를 호출하는 코드를 생성했는데, 이 함수는 명시적인 임시 값 없이 단일 단어 데이터에 대해 "스왑" 작업을 가능하게 했다. x:=RDLK(x,y);
WHOI - 프로세서 식별
IDLE : 인터럽트가 수신될 때까지 아이돌 상태

2개의 프로세서가 동시에 'HEYU' 명령어를 송신하는 경우는 드물기 때문에 '치명적인 포옹'이라고 불리는 행업이 발생합니다.

B5000의 영향

B5000의 직접적인 영향은 현재 메인프레임의 Unisys ClearPath 제품군에서 확인할 수 있습니다.이 메인프레임들은 B5000의 직계 후손으로 40년간의 꾸준한 개발 후에도 여전히 MCP 운영체제를 보유하고 있습니다.B5000 아키텍처는 x86 명령 세트를 네이티브 명령 세트로 실행하고 있는 인텔 Xeon 프로세서에서 구축된 머신에 구현되어 B5000 명령 세트를 에뮬레이션하는 코드가 실행되었기 때문에 현재 emode(에뮬레이션 모드용)라고 불립니다.이러한 머신에서는 n모드(네이티브모드)도 있습니다만, 이것이 드롭[citation needed] 되어 B5000 후계 머신이 「emode machine」이라고 불리는 경우가 자주 있습니다.

B5000 머신은 고급 언어로만 프로그래밍되어 있으며 어셈블러는 없습니다.

B5000 스택 아키텍처는 프로그래밍 언어 Forth의 설계자인 Chuck Moore에게 영감을 주었습니다.그는 MIT에서 B5500을 접하게 되었습니다.Forth - The Early Years에서 무어는 Forth의 DUP, DROP 및 SWAP이 대응하는 B5500 명령(DUPL, DLET, EXCHANG)에서 유래한 것이라고 설명했습니다.

스택 기반 아키텍처와 태그 부착 메모리를 갖춘 B5000 머신은 소련의 Elbrus 시리즈 메인프레임과 슈퍼컴퓨터에도 큰 영향을 주었습니다.시리즈의 처음 2세대는 태그 부착 메모리와 스택 기반 CPU를 탑재하여 고급 언어로만 프로그래밍되었습니다.이들을 위한 일종의 어셈블리 언어인 El-76이 존재했지만, 그것은 다소 ALGOL 68의 수정이었고 구조화된 프로그래밍과 일급 프로시저를 지원했다.그러나 시리즈의 후세대는 이 아키텍처에서 EPIC와 같은 VLIW CPU로 전환했습니다.

HP 3000 비즈니스 시스템의 Hewlett-Packard 설계자는 B5500을 사용했으며 하드웨어와 소프트웨어에 큰 감명을 받았습니다.그들은 유사한 소프트웨어로 16비트 미니컴퓨터를 구축하는 것을 목표로 했습니다.다른 HP 부문에서도 유사한 미니 컴퓨터 또는 마이크로프로세서 스택 머신을 개발했습니다.폴란드어 역 표기법(RPN)에 관한 Bob Barton의 연구도 9100A부터 시작하여 HP-35와 그 이후의 계산기에까지 보급되었다.

1970년대 후반과 1980년대 초반에 Tandem Computers에 의해 설계된 NonStop 시스템도 16비트 스택 머신이었으며, 초기 Tandem 엔지니어 중 일부는 HP 3000 연결을 통해 간접적으로 B5000의 영향을 받았습니다.1990년경 이들 시스템은 MIPS RISC 아키텍처로 이행했지만 오브젝트 코드 변환 또는 직접 에뮬레이션을 통한 스택머신 바이너리 실행을 계속 지원했습니다.2000년 이후, 이러한 시스템은 Itanium 아키텍처로 이행해, 레거시 스택 머신의 바이너리를 계속 실행하고 있습니다.

Bob Barton은 또한 Alan Kay에게 매우 영향력이 있었다.또한 Kay는 B5000의 데이터 기반 태그 부착 아키텍처에 깊은 인상을 받았고, 이는 객체 지향 프로그래밍과 Smalltalk [citation needed]개발 과정에서 그의 생각에 영향을 미쳤습니다.

B5000 아키텍처의 또 다른 측면은 하드웨어에서 직접 실행되는 안전한 아키텍처라는 것입니다.이 기술은 오늘날의 가상[citation needed] 머신에서 보안 환경을 제공하기 위한 후속 기술을 제공합니다.이러한 제품 중 주목할 만한 것은 Java JVM입니다.Java JVM은 애플리케이션을 실행하는 안전한 샌드박스를 제공합니다.

emode 이전에 존재했던 하드웨어 아키텍처 바인딩의 값은 MCP가 유일한 제어 프로그램일 정도로 x86 기반 머신에서 실질적으로 유지되지만 이러한 머신에서 제공되는 지원은 B5000 명령 세트가 네이티브 명령 세트인 머신에서 제공되는 지원보다 여전히 열악합니다.x86 명령어 세트의 32비트 실장 이전의 인텔 프로세서 아키텍처(인텔 iAPX 432)도 기본적으로 객체 지향 아키텍처였기 때문에 동등한 물리 기반을 제공했을 것입니다.

「 」를 참조해 주세요.

메모들

  1. ^ 예: B5000의 경우 12비트 음절, B6500의 경우 8비트 음절
  2. ^ 보안 문제가 있었습니다.
  3. ^ 에러 컨트롤은 카운트되지 않습니다.
  4. ^ a b c B5000, B5500 및 B5700 전용
  5. ^ B6500, B7500 및 후속 제품만
  6. ^ 문자 데이터 또는 코드를 포함하는 단어에 플래그 비트가 없습니다.

레퍼런스

  • 확장 ALGOL 입문서 (3권), 도널드 J. 그레고리.
  • 컴퓨터 아키텍처: 구조화된 접근법, R. Doran, 학술 출판사(1979년).
  • 스택 컴퓨터: The New Wave Philip J. Koopman은 다음 사이트에서 만나보실 수 있습니다.[ 1 ]
  • B5500, B6500, B6700, B6800, B6900, B7700 매뉴얼 (bitsavers.org )
  1. ^ a b c John T. Lynch (August 1965), "The Burroughs B8500" (PDF), Datamation: 49–50
  2. ^ a b c d George Gray (October 1999), "Burroughs Third-Generation Computers", Unisys History Newsletter, 3 (5), archived from the original on September 26, 2017
  3. ^ Burroughs (1963), The Operational Characteristics of the Processors for the Burroughs B5000 (PDF), Revision A, 5000-21005
  4. ^ John Mashey (2006-08-15). "Admired designs / designs to study". Newsgroup: comp.arch. Usenet: 1155671202.964792.162180@b28g2000cwb.googlegroups.com. Retrieved 2007-12-15.
  5. ^ a b Burroughs (May 1967), Burroughs B5500 Information Processing System Reference Manual (PDF), 1021326
  6. ^ 취득처
  7. ^ a b Burroughs B6500 Information Processing System Reference Manual (PDF), Burroughs, September 1969, 1043676
  8. ^ a b "Historical Narrative The 1960s; US vs IBM, Exhibit 14971, Part 2". ed-thelen.org. US Government. July 22, 1980. p. 648 (409). Retrieved February 21, 2019. Alt URL
  9. ^ GhostarchiveWayback Machine에서 아카이브:
    • 출하율, 최초 16대의 컴퓨터:
  10. ^ "Computing History Displays: Fourth Floor". University of Auckland. Retrieved 18 May 2020.
  11. ^ Anderson, James P.; Hoffman, Samuel A.; Shifman, Joseph; Williams, Robert J. (1962), "D825 - a multiple-computer system for command & control", Proceedings of the December 4–6, 1962, Fall Joint Computer Conference, AFIPS Conference Proceedings, vol. 24, pp. 86–96, doi:10.1145/1461518.1461527, ISBN 9781450378796, S2CID 1186864
  12. ^ Henry M. Levy, "Chapter 2 Early Descriptor Architectures" (PDF), Capability-Based Computer Systems, Digital Press
  13. ^ "B5500 Announcement" (PDF). Burroughs. August 11, 1964.
  14. ^ Dave's Old 컴퓨터의 SCAMP 사진
  15. ^ Reitman, Valerie (January 18, 1989), "Unisys Ready To Offer A Desktop Mainframe", The Philadelphia Inquirer, retrieved 2011-04-16
  16. ^ a b "Company History". 9 July 2021. Retrieved 2021-08-28.
  17. ^ a b "Unisys Clears the Path Ahead for A & OS 2200 Series Customers". Retrieved 2021-08-28.
  18. ^ "Unisys Accelerates Mainframe Rebirth with New ClearPath Enterprise Servers, Aggressive New Pricing. - Business Wire - HighBeam Research" (Press release). June 8, 1998. Archived from the original on May 16, 2011.
  19. ^ "Libra 595". Unisys.
  20. ^ "Libra 750". Unisys. 24 June 2021.
  21. ^ Organick, Elliot (1973). Computer System Organization. ACM. pp. 115–117. ISBN 0-12-528250-8.
  22. ^ "Archirecture of the IBM System /360" (PDF). Archived from the original (PDF) on 2020-06-01. Retrieved 2021-09-10.

추가 정보

외부 링크