GnuSmalltalkUsersGuide:BaseChapter 133
- ProcessorScheduler
ProcessorScheduler
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: Object
범주: 언어-프로세스
- 나는 프로세스의 실행을 제어하는 메서드를 제공한다.
ProcessorScheduler 클래스: 인스턴스 생성
new
오류-ProcessorScheduler의 새 인스턴스가 생성되어선 안 된다.
ProcessorScheduler: 기본
activeDebugger
활성 프로세스의 디버거를 응답하라.
activePriority
활성 프로세스의 우선순위를 응답하라.
activeProcess
활성 프로세스를 응답하라.
processEnvironment
스몰토크 프로세스에 대한 thread-local 변수를 호스팅하는 또 다른 싱글톤 객체를 응답하라. 이는 일반 Dictionary와 같이 행위하지만 몇 가지 차이가 있다: a) #associationAt: 을 이용 시 특수 연관을 리턴하여 thread-local 값을 검색할 것이다; b) 누락된 키를 요청 시 nil을 리턴하고, 그 키를 제거 시 nop(무연산)이 될 것이다.
processesAt: aPriority
주어진 우선순위에서 프로세스의 연결 리스트를 응답하라.
terminateActive
활성 프로세스를 종료하라.
timeSlice
시스템이 자동으로 선점하기 전에 각 Process로 할당된 시간구획(timeslice)을 응답하라 (밀리초로). 0을 응답하면 선점 다중 작업이 비활성화 되었음을 의미한다. 기본적으로 시스템은 선점 다중 작업 없이 컴파일되며, 활성화된다 하더라도 BSD derivatives(또는 일반적으로 ITIMER VIRTUAL을 지원하는 시스템)에서만 작동할 것임을 주목하라.
timeSlice: milliSeconds
시스템이 자동으로 선점하기 전에 각 Process로 할당되는 시간구획(timeslice)을 설정하라. 0으로 설정 시 선점 다중 작업이 비활성화 된다. 기본적으로 시스템은 선점 다중 작업을 비활성화시킨 채 컴파일하며, 활성화된다 하더라도 BSD derivatives(또는 일반적으로 ITIMER VIRTUAL을 지원하는 시스템)에서만 작동할 것임을 주목하라.
yield
활성 프로세스가 다른 프로세스로의 제어를 생성하도록 하라.
ProcessorScheduler: built-ins
Twice
disableInterrupts
현재 프로세스가 실행되는 동안 외부 이벤트에서 야기하는 인터럽트를 비활성화하라. 프로세스별로 인터럽트가 비활성화되며, #disableInterrupts를 두 번 호출 시 #enableInterrupts도 두 번 호출되어 인터럽트가 재활성화된다.
enableInterrupts
현재 프로세스가 실행되는 동안 외부 이벤트에서 야기하는 인터럽트를 비활성화하라. 기본적으로 인터럽트는 활성화된다.
ProcessorScheduler: idle tasks
idle
Private - 다음 idle 작업을 호출하라.
idleAdd: aBlock
무언가 유휴 상태(idle)가 되면 aBlock이 실행되도록 등록하라.
initialize
Private - finalization 과정을 시작하라.
update: aSymbol
이미지가 저장될 때 남겨둔 일이 있다면 지금 실행하라.
ProcessorScheduler: 인쇄하기
printOn: aStream
수신자의 인쇄된 표현을 aStream 상에 보관하라.
ProcessorScheduler: 우선순위
highIOPriority
네트워크로부터 입력을 처리하는 프로세스와 같이 시스템에서 높은 우선순위 I/O 프로세스에 대한 우선순위를 응답하라.
highestPriority
최고 유효 우선순위를 응답하라.
lowIOPriority
시스템에서 낮은 우선순위 I/O 프로세스에 대한 우선순위를 응답하라. 예로 사용자(키보드, 위치 결정 장치 등)로부터 입력을 처리하는 프로세스나 네트워크로부터 입력을 분산시키는 프로세스를 들 수 있겠다.
lowestPriority
최저 유효 우선순위를 응답하라.
priorityName: priority
Private - 주어진 프로세스 우선순위에 해당하는 이름을 응답하라.
rockBottomPriority
최저 유효 우선순위를 응답하라.
systemBackgroundPriority
시스템 배경-우선순위 프로세스에 대한 우선순위를 응답하라. 점진적 쓰레기 수집기나 상태 점검기(status checker)를 예로 들 수 있겠다.
timingPriority
실시간 프로세스에 대한 우선순위를 응답하라.
unpreemptedPriority
시스템에서 이용 가능한 최고 우선순위를 응답하라; 해당 우선순위로 프로세스를 절대 생성하지 말고, 대신 BlockClosure>>#valueWithoutPreemption를 사용하라.
userBackgroundPriority
사용자 배경-우선순위 프로세스에 대한 우선순위를 응답하라.
userInterruptPriority
사용자 인터럽트-우선순위 프로세스에 대한 우선순위를 응답하라. 이 수준에서 실행되는 프로세스는 윈도우 스케줄러를 선점하고, 그에 따라 프로세서를 영구적으로 소모하지 않을 것이다.
userSchedulingPriority
사용자 표준-우선순위 프로세스에 대한 우선순위를 응답하라.
ProcessorScheduler: 보관하기
storeOn: aStream
수신자에게 평가하는 스몰토크 표현식을 aStream 상에 보관하라.
ProcessorScheduler: 시간이 명시된(timed) 호출
isTimeoutProgrammed
Private - #signal:atMilliseconds: 로 보류 중인 호출(pending call)이 존재하는지 응답하라.
signal: aSemaphore atMilliseconds: millis
Private - 'millis' 밀리초가 흐른 다음 'aSemaphore'를 시그널링하라.
signal: aSemaphore onInterrupt: anIntegerSignalNumber
주어진 C 신호가 발생할 때 'aSemaphore'를 시그널링하라.