4
제 3 항에 있어서, 상기 제 3 단계는, 상기 중앙처리장치에서 발생되는 트랩이 입력되면, 입력된 트랩이 인터럽트인지를 판단하는 제 16 단계; 상기 제 16 단계의 판단결과, 입력된 트랩이 인터럽트이면, 스택을 시스템의 인터럽트 스택으로 천이하고, 일반적인 인터럽트를 처리하는 제 17 단계; 상기 제 16 단계의 판단결과, 입력된 트랩이 인터럽트가 아니면, 메모리 폴트이고 스택 포인터가 보호 구역내에 있는지를 판단하는 제 18 단계; 상기 제 18 단계의 판단결과, 메모리 폴트이고 스택 포인터가 보호 구역내에 있으면, 스택증가시 물리주소(stack_grow) 변수값이 영(0)인지를 판단하는 제 19 단계; 상기 제 19 단계의 판단결과, 상기 변수값이 영(O)으로 스택 증가가 일어나지 않은 상태이면, 메모리 한 페이지를 할당하고, 논리 주소를 기존 논리 주소와 연속되게 할당하는 제 20 단계; 할당된 주소를 스택증가시 물리주소(stack_grow)값에 설정한 후, 확장된 스택 영역에 대해 상기 메모리 관리 유니트(MMU)를 맵핑하는 제 21 단계; 이전 보호 구역의 모드를 시스템 일반 모드로 변경하여 보호 구역을 해제하는 제 22 단계; 기존 보호 구역의 페이지를 상기 메모리 관리 유니트(MMU)에서 플러쉬한 후 폴트 발생 위치로 리턴하여 재실행하는 제 23 단계; 상기 제 18 및 제 19 단계의 판단결과, 메모리 폴트이고 스택 포인터가 보호 구역내에 없거나, 메모리 폴트이고 스택 포인터가 보호 구역내에 있고 스택증가시 물리주소(stack_grow) 변수값이 영(0)이외의 다른 값으로 이미 스택 증가가 한번 일어난 상태이면, 사용자 프로그램에 문제가 있는 것으로 간주하여 스택 포인터가 유효한 값인지를 판단하는 제 24 단계; 상기 제 24 단계의 판단결과, 스택 포인터가 정상적인 값이 아니면 커널 스택 영역으로 이동하고, 폴트 정보를 출력하는 제 25 단계; 상기 제 24 단계의 판단결과, 스택 포인터가 정상적인 값이면, 바로 폴트 정보를 출력하는 제 26 단계; 및 폴트가 발생한 프로세스의 수행을 정지시키고, 다른 프로세스로 스케줄링하는 제 27 단계 를 포함하는 실시간 시스템을 위한 스택 관리 방법
|