간단한 운영 체제를 개발하려고합니다. 지금까지 내가 개발 한 모든 프로그램을 단일 프로세서에서 실행할 수 있습니다. 하지만 거의 모든 최신 시스템을 기반으로하는 멀티 프로세싱 시스템이라는 개념을 살펴 보았을 때 많은 의구심을 갖게되었습니다.
첫째, 멀티 프로세서 시스템에서 실행할 수있는 프로그램을 어떻게 만들 수 있습니까? 하드웨어 지향적입니까 아니면 프로그래머 특정입니까?
두 번째로 Java는 하나이지만 C는 아닌 다중 처리 시스템에서 도움이 될 수있는 병렬 프로그래밍 언어를 살펴 보았습니다. 그렇다면 C (Windows)로 개발 된 OS가 어떻게 멀티 프로세싱을 할 수 있을까요?
감사.
당신 말이 맞습니다 : 전형적인 C 프로그램은 단일 프로세서입니다. 작성하는 명령문은 필요에 따라 루프 및 테스트에 따라 차례로 실행될 것으로 예상됩니다. 그러나 C에서 "지금이 함수를 실행하지 마십시오 : 새 스레드를 만들고이를 사용하여 실행하십시오!"라는 함수를 호출 할 수 있습니다.
int maxPlaces;
int piDigits;
void CalculatePi() {
// write code to calculate pi to maxPlaces
// Update piDigits as you go
} // CalculatePi()
int main() {
maxPlaces = 2000000000;
// CalculatePi(); // OLD CODE: Don't do this! Instead, do...
StartThread(CalculatePi);
while (piDigits<=maxPlaces) {
Print(piDigits);
} // while
} // main()
내 (만들어진) 기능을 사용하지 않고 OLD CODE로이 코드를 실행 StartThread()
하면 프로그램이 오랫동안 멈춘 후 완료되면 2000000000이라는 숫자가 출력됩니다.
하지만 내 함수 StartThread()
는 OS에 함수에 대한 새 실행 스레드를 CalculatePi()
만든 다음 즉시 반환 하도록 지시합니다 . 즉 main()
, 값 piDigits
이 커질수록 반복적으로 인쇄 할 수 있습니다 . 이제 두 개의 실행 스레드가 있습니다. 하나는 파이의 자릿수를 계산하고 다른 하나는 얼마나 멀리 있는지 출력합니다.
이 프로그램은 단일 프로세서로만 실행되는 모든 다중 스레드 OS에서 작동합니다. 이 경우 각 스레드는 다른 스레드로 교체되기 전에 약간의 프로세서 시간을 얻습니다. 컴퓨터에 여러 개의 프로세서가있는 경우 OS는 하나의 스레드를 다른 스레드에 제공 할 수 있습니다. 프로그램은 신경 쓰지 않거나 (보통) 알지 못합니다.
그러나 병렬 프로그래밍 언어는 이와 같이 새로운 실행 스레드를 명시 적으로 만들 필요가 없도록 작성되었습니다. 언어의 구문과 디자인은 작업을 동시에 실행할 수있는시기를 명확하게합니다. C는 그렇지 않지만 특수 함수 호출로 동시성을 활용할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다