시스템 호출: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
63번째 줄:
 
다음과 같은 절차로 응용프로그램 함수가 커널의 함수와 연결된다:
# 응용프로그램에서 open(...) 함수를 실행하면 c-lib에서libc에서 제공한 open 함수속에서 인수 데이터를 레지스터에 넣고 소프트웨어 [[인터럽트]]를 실행한다.
# 소프트웨어 인터럽트에 의해 ISR(Interrupt Service Routine)이 있는 커널의 인터럽트 처리 위치로위치를 찾아 해당 주소주소로 실행을 한다옮긴다. 이때 CPU은 특권레벨이 최고수준의 실행모드가 된다. CPU의 인터럽트 메카니즘의메카니즘에 하나다의해 자동변환 된다.
# 많은 시스템 호출 함수중에 해당 인터럽트 벡터숫자를 이용해 함수의 위치를 탐색하고 해당주소로 점프한다. 해당커널 속의 디바이스 목록에서 해당 디바이스를 찾고 드라이버의 함수 '''.open'''에서 정의된 '''mydrv_open'''(...)가 호출된다.
# mydrv_open()함수의 '''return'''에 따라 커널의 함수 호출이 완료되고, 커널은 다시 해당 응용프로그램를응용프로그램을 스케쥴러에스케쥴링에 넣어의해 활성화하고 해당 [[프로세서]]로 전환한다. 이 때 CPU의 특권레벨은 다시 사용자모드로 전환된다.
 
만약 write함수나 read 함수의 호출에 의해, 커널의 함수가 호출된 후 return에 의해 종료되지 않으면 응용프로그램은 스케쥴링에서 빠져 커널의 상태에서 머물르는머물면서 블럭킹 현상이 발생한다. 해당 드라이버의 인터럽트 등으로 블럭킹을 해제할 수 있다.
 
만약 write함수나 read 함수의 호출에 의해, 커널의 함수가 호출된 후 return에 의해 종료되지 않으면 응용프로그램은 스케쥴링에서 빠져 커널의 상태에서 머물르는 블럭킹 현상이 발생한다.
== 같이 보기 ==
* [[x86 호출 규약#syscall]]