프로 세 스 의 데이터 구조 에서

1321 단어 운영 체제
프로그램 이 실행 되 는 과정 에서 시스템 호출 과 관련 되면 커 널 에 들 어가 계속 실행 해 야 한다.그러면 어떻게 사용자 상태 와 커 널 상태의 실행 을 연결 합 니까?다음 두 가지 중요 한 변수 가 필요 합 니 다.
struct thread_info    thread_info;
void  *stack;

사용자 상태 함수 스 택
스 택 은 높 은 주소 에서 낮은 주소 로 아래로 늘 어 나 는 구조 이다.32 비트: CPU 에서 ESP 는 스 택 상단 포인터 레지스터 이 고 EBP 는 스 택 기본 주소 포인터 레지스터 입 니 다.함수 가 돌아 올 때 반환 값 은 EAX 레지스터 중국 에 저 장 됩 니 다. 스 택 에서 주 소 를 되 돌려 주 고 명령 을 되 돌려 줍 니 다. 매개 변수 도 스 택 에서 꺼 낸 다음 에 A 64 비트 를 계속 실행 합 니 다. rdi, rsi, rdx, rcx, r8, r9 등 6 개의 레지스터 는 저장 함수 호출 시의 6 개의 인 자 를 전달 합 니 다.6 이 넘 으 면 창고 에 넣 어야 합 니 다.그러나 앞의 6 개의 매개 변 수 는 가끔 주 소 를 찾 아야 하지만 레지스터 안에 주소 가 없 으 면 스 택 에 넣 습 니 다. 스 택 에 넣 는 작업 은 호출 함수 에 의 해 이 루어 집 니 다.
커 널 상태 함수 스 택
32 비트 의 커 널 스 택 은 8K 이 고 64 비트 의 커 널 스 택 은 16K 이다.커 널 스 택 의 최저 주 소 는 thread 입 니 다.info 구조, 커 널 스 택 의 최고 주소, 다른 구조 pt 저장regs, 32 비트 와 64 비트 의 정의 가 다 릅 니 다.
task 통과 하기struct 내부 창고 찾기
task_struct 의 stack 지침 이 손 에 있 습 니 다. 아래 함 수 를 통 해 이 스 레 드 커 널 스 택 을 찾 을 수 있 습 니 다.pt 를 어떻게 찾 는 지 에 대해 서regs?창고 밑 의 위 치 를 찾 은 후에 바늘 로 조작 하면 내부 레지스터 를 찾 을 수 있다
커 널 스 택 을 통 해 task 찾기struct
32 위 는 주로 threadinfo, 64 비트 는 Per - CPU 변수 에 의존 합 니 다.

좋은 웹페이지 즐겨찾기