동시 파스칼
Concurrent Pascal패러다임 | 필수, 구조화, 동시 실행 |
---|---|
가족 | 워스 파스칼 |
설계자 | 페르 브린치 한센 |
처음 등장한 | 1974년 4월; | 전(
타이핑 분야 | 정적, 동적, 견고, 안전성 |
플랫폼 | DEC PDP 11 |
영향을 받다 | |
ALGOL 60, Simula 67, Pascal |
Concurrent Pascal은 Per Brinch Hansen이 공유 메모리 컴퓨터에서 [1]운영 체제 및 실시간 컴퓨팅 모니터링 시스템 등의 동시 컴퓨팅 프로그램을 작성하기 위해 설계한 프로그래밍 언어입니다.
Concurrent Pascal로 작성된 운영 체제에서 실행되는 응용 프로그램용 언어인 Sequential Pascal이 사용됩니다.두 언어 모두 Niklaus Worth의 Pascal 확장판으로 공통 스레드 코드 [2]인터프리터를 공유합니다.다음은 동시 파스칼이 워스의 파스칼과 어떻게 다른지 설명합니다.
언어 설명
단순성과 [2]보안을 위해 Pascal의 여러 구성 요소가 Concurrent Pascal에서 제거되었습니다.
- 변종 레코드
- Goto 스테이트먼트 및 라벨
- 파라미터로서의 절차
- 패킹된 어레이
- 포인터 타입
- 파일 형식 및 관련 표준 입출력 절차
이러한 누락에 의해, 스레드 코드 인터프리터의 컴파일 시간 체크와 최소한의 런타임 체크를 조합하는 것으로, 할당된 공간외의 어드레싱에 의해서, 프로그램이 자신이나 다른 프로그램을 손상시키지 않는 것을 보증할 수 있습니다.
동시 Pascal에는 클래스, 모니터 및 프로세스 데이터 유형이 포함됩니다.이러한 유형의 인스턴스는 변수로 선언되며, 다음과 같이 초기화됩니다.init
진술.
클래스와 모니터는 유사합니다.프라이빗 변수와 프로시저를 모두 공개 프로시저(프로시저 엔트리라고 불립니다)로 패키지화합니다.클래스 인스턴스는 1개의 프로세스에서만 사용할 수 있으며 모니터인스턴스는 프로세스에서 공유할 수 있습니다.모니터는 동시 파스칼 프로그램에서 프로세스 간 통신을 위한 유일한 메커니즘을 제공합니다.
한 번에 하나의 모니터인스턴스 내에서 실행할 수 있는 프로세스는 1개뿐입니다.기본 제공 데이터 유형, 큐 및 운영delay
그리고.continue
는 모니터 내의 스케줄에 사용됩니다.큐 유형의 각 변수는 하나의 프로세스를 유지할 수 있습니다.모니터에서 많은 프로세스가 지연될 경우 일반적으로 배열로 구성된 여러 대기열 변수를 제공해야 합니다.단일 프로세스 큐 변수는 모니터에 중기 스케줄링을 완전히 제어하지만 프로그래머는 올바른 프로세스를 차단 해제할 책임이 있습니다.
프로세스에는 클래스나 모니터와 마찬가지로 로컬 변수, 프로시저 및 초기문이 있지만 프로시저 엔트리는 없습니다.첫 번째 문은 보통 로컬프로시저, 클래스 프로시저 및 모니터프로시저를 호출하여 영원히 실행됩니다.프로세스는 모니터 절차를 통해 통신합니다.언어 규칙은 모니터에 계층을 적용하여 교착 상태를 방지합니다.그러나 모니터가 (계속 호출을 하지 않음으로써) 지연된 프로세스를 차단하는 것을 잘못 잊어버리는 것을 막을 수 없기 때문에 프로그래밍 오류가 발생해도 시스템이 효과적으로 끊길 수 있습니다.
Concurrent Pascal 프로그램의 프로세스, 모니터 및 클래스 구성은 일반적으로 실행 시작 시 설정되며 그 이후에는 변경되지 않습니다.이들 컴포넌트 간의 통신 경로는 다음 컴포넌트에 전달되는 변수에 의해 확립됩니다.init
클래스 및 모니터인스턴스 변수를 프로시저 파라미터로 사용할 수 없기 때문에 문을 사용합니다.
예
다음으로 단순한 모니터 선언과 2개의 통신 프로세스에서의 사용 예를 나타냅니다.
유형 "바운딩 버퍼 모니터" 완충 장치 = 모니터 변화하다 저장했다 : 정수; "항목이 정수입니다." 풀, 비어 있다 : 큐; "2개의 프로세스에서만 사용" 가득한 : 부울; "항목이 저장되면 true: " "아이템을 버퍼에 넣습니다." 절차. 엔트리 놓다(아이템 : 정수); 시작한다. 한다면 가득한 그리고나서 지연시키다(풀); "전체일 경우 차단" 저장했다 := 아이템; "항목 저장" 가득한 := 진실의; "풀로 표시" 계속하다.(비어 있다) "소비자 차단 해제" 끝.; "버퍼에서 항목을 가져옵니다." 절차. 엔트리 얻다(변화하다 아이템 : 정수); 시작한다. 한다면 것은 아니다. 가득한 그리고나서 지연시키다(비어 있다); "빈 경우 차단" 아이템 := 저장했다; "아이템 가져오기" 가득한 := 거짓의; "풀하지 않은 것으로 표시" 계속하다.(풀) "블록 해제 프로듀서" 끝.; "모니터 초기화" 시작한다. 가득한 := 거짓의 끝.; "프로듀서는 버퍼를 사용합니다." 제작자 = 과정(통과하다 : 버퍼); 변화하다 아이템 : 정수; 시작한다. 사이클 "영원히 순환하고 있다. "아이템 제작" 통과하다.놓다(아이템) "모니터에 아이템 전달" 끝. 끝.; "소비자는 버퍼를 사용합니다." 소비자 = 과정(통과하다 : 버퍼); 변화하다 아이템 : 정수; 시작한다. 사이클 통과하다.얻다(아이템); "모니터에서 아이템 가져오기" "항목 삭제" 끝. 끝.; "모니터, 생산자 및 소비자 인스턴스 증가" "생산자와 소비자가 모니터에 접근할 수 있도록 합니다." 변화하다 통과하다 : 버퍼; 자극하다 : 프로듀서; 단점 : 컨슈머; 시작한다. 초기화 통과하다, "모니터 초기화" 자극하다(통과하다), "프로듀서 프로세스 시작" 단점(통과하다) "소비자 프로세스 시작" 끝..
레퍼런스
- ^ Brinch Hansen, Per (June 1975). "The programming language Concurrent Pascal" (PDF). IEEE Transactions on Software Engineering (2): 199–207. doi:10.1109/tse.1975.6312840.
- ^ a b Brinch Hansen, Per (1977). The Architecture of Concurrent Programs. Prentice Hall. ISBN 978-0-13-044628-2.