2017-09-27 19 views
0

새로운 커널 이미지를 만들기 위해 assembly languageC과 함께 사용되는 곳에서 많은 튜토리얼을 보았습니다. 그러나 왜 조립이 필요한지 이해할 수 없지만 C Compiler은 C 코드에서 asm을 생성 할 수 있습니다.asm 코드를 사용하지 않고 커널 이미지를 만들 수 있습니까?

프로그래밍 커널에 assembly 코드를 사용하는 이유는 무엇입니까? 그리고 asm에서 코드를 작성할 필요없이 C 아래에서 커널을 개발하는 것이 가능한가?

+1

나는 그것이 당신이 의도 한 것이고 그것이 작동하도록하는 어떤 방법을 모르지만 이론적으로 당신이 원하는 코드를 생성하도록 컴파일러를 강요 할 수도 있습니다. 그렇지 않으면, 나는 운영 체제가 인터럽트, 작업 전환 및 기타 많은 기능을 지원할 수 있다고 생각하지 않습니다. –

+0

[OS 커널을 시작하는 데 어셈블리가 필요한 이유가 무엇입니까?] (https://stackoverflow.com/questions/22794239/why-assembly-needed-to-kick-start-any-os-kernel) 정확한 복제물. 다른 질문은 * 커널을 초기화하고 커널을 시작하는 데 더 중점을 둡니다. –

답변

2

C에서 커널을 만드는 것이 무엇을 의미하는지 정의하지 않습니다.

asm C 코드에서 embed assembler에 대한 진술이나 선언을 사용할 수 있습니다 (단, "부정 행위"이므로 더 이상 이식성이 없습니다).

하지만 (특히 그 조작 작업 또는 continuations 또는 call stacks 또는 interrupts - scheduler 즉, - 또는 virtual memory) 몇 가지가 있기 때문에 당신은 순수한 휴대용 C의 전체 multi-tasking 커널을 쓸 수 없습니다 C.주의로 코딩 할 수없는 경우에도 longjmp(3) 할 수 없음을 나타 순수 C.

에서 구현 될 것은 OSDEV 위키를 참조 또한 Operating Systems : Three Easy Pieces

연구 기존 스케줄러의 소스 코드를 읽고, 핸들러, VM 서브 시스템을 중단. ... free software 운영체제에서 (그리고 사용하고있는 어셈블러 코드를 C로 어떻게 재 코딩 할 것인가?). 어셈블러가 필요합니다 ("성능"이나 "가독성"을 이유로).

+0

"Operating Systems : Easy Easy Pieces"책의 VM/sched 부분을 읽었지 만,이 경우 왜 asm이 필요한지 아직 알지 못합니다. – Kais

+0

커널이 멀티 태스킹입니다. – Kais

+1

순수 C로 스케줄러 작성을 시도해보십시오. 그렇게하지 못할 수도 있습니다. –