새로운 시스템 호출을 추가하는 운영 체제 할당을하고 있습니다. "dumbfork"라고하는 시스템 호출은 copy-on-write 정책을 사용하지 않고 프로세스를 포크해야합니다. 따라서 기본적으로 전체 주소 공간을 하위 프로세스에 복사해야합니다.copy-on-write를 사용하지 않고 do_fork를 호출하는 중
시스템 커널을 설치하고 다시 컴파일 할 수있었습니다. 내 사용자 지정 시스템 호출을 호출 할 수 있지만 실제로 COW 기능을 사용하지 않도록 dumbfork를 구현하는 방법을 모르겠습니다. 소스 코드 중 하나가 sys_vfork이 do_fork를 호출하는 방법을 보여줍니다. 덤프는 sys_vfork와 비슷해야합니다. do_fork의 매개 변수를 어떻게 설정할 수 있는지 모르겠습니다. 나는 sys_fork가 구현되는 방법을 모방하려고 시도했다. 그리고 그것은 NULL 포인터 역 참조 오류를 준다. 누구든지이 문제에 대해 나를 깨우칠 수 있습니까?
asmlinkage long sys_dumbfork(struct pt_regs *regs)
{
return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
}
'sys_vfork'는 원하는 것과 정확히 반대입니다! –
네, 맞습니다. vfork는 플래그 CLONE_VM, CLONE_VFORK 및 SIGCHLD를 do_fork로 전달하고 주소 공간을 공유합니다. 어쨌든 vfork의 자식은 exec 또는 exit를 수행하므로 의미가 있습니다. – NeoJi