시스템콜(종종 시스콜이라 불림)
프로세스 컨텍스트 내에선 커널은 휴면이 가능하며 선점될 수 있다.
휴면이 가능하다는 것은 인터럽트에 비해 훨씬 편리한 커널 프로그래밍을 가능하게 한다.(인터럽트는 휴면이 불가능 하므로 프로세스 컨텍스트에서 도는 시스콜보다 제한이 많다).
선점이 가능하다는 것은 지금 테스크 역시 선점 가능하다는 소리이므로 다른 테스크에서 같은 시스콜을 호출 할 수 있기에 시스콜이 재진입 여부를 체크해야 한다.(이것은 SMP에서 고려해야 하는 상황과 같다)
시스콜이 리턴하면 컨트롤은 system_call() 계속되며 결국 유저 프로세스로 돌아간다
시스콜 추가 하는법
1. 시스템콜 테이블 끝에 새로운 엔트리를 추가한다. 지원할려는 아키텍쳐마다 추가해야 하며, 테이블에서의 위치-1이 시스템콜 넘버이다.
Entry.S
....
2. 각 지원되는 아키텍쳐마다 시스콜 넘버를에 정의한다.
3. 시스콜을 커널이미지에 컴파일 한다.(kernel/ 에 관련된 파일에 시스콜을 추가한다. 예)sys.c)
asmlinkage long sys_getpid (void)
{
return current->tgid
}
프로세스 컨텍스트 내에선 커널은 휴면이 가능하며 선점될 수 있다.
휴면이 가능하다는 것은 인터럽트에 비해 훨씬 편리한 커널 프로그래밍을 가능하게 한다.(인터럽트는 휴면이 불가능 하므로 프로세스 컨텍스트에서 도는 시스콜보다 제한이 많다).
선점이 가능하다는 것은 지금 테스크 역시 선점 가능하다는 소리이므로 다른 테스크에서 같은 시스콜을 호출 할 수 있기에 시스콜이 재진입 여부를 체크해야 한다.(이것은 SMP에서 고려해야 하는 상황과 같다)
시스콜이 리턴하면 컨트롤은 system_call() 계속되며 결국 유저 프로세스로 돌아간다
시스콜 추가 하는법
1. 시스템콜 테이블 끝에 새로운 엔트리를 추가한다. 지원할려는 아키텍쳐마다 추가해야 하며, 테이블에서의 위치-1이 시스템콜 넘버이다.
Entry.S
ENTRY(sys_call_table)
.long sys_open
.long sys_read
....
2. 각 지원되는 아키텍쳐마다 시스콜 넘버를에 정의한다.
#define __NR_restart_sys_call
#define __NR_exit
3. 시스콜을 커널이미지에 컴파일 한다.(kernel/ 에 관련된 파일에 시스콜을 추가한다. 예)sys.c)
asmlinkage sys_foo (void)
{
...
}
'리눅스 > 커널' 카테고리의 다른 글
Linux 3.0 Kernel (0) | 2011.07.31 |
---|---|
커널선점 (0) | 2011.05.01 |
커널 스레드 (0) | 2011.05.01 |
커널 초기화 (0) | 2011.04.20 |
asmlinkage 에 대한 설명 (0) | 2011.04.15 |