커널 소스 파악 질문있습니다.
글쓴이: jbs0123 / 작성시간: 일, 2019/03/24 - 4:10오후
context switching이 어떻게 동작하는지 궁금하여 분석을 해보려다...내공이 부족하여 질문을 올리게 되었습니다.
일단
movq %rsp,TASK_threadsp(%rdi)
movq TASK_threadsp(%rsi), %rsp
이런 코드가 있는데 TASK_threadsp가 어떤 동작을 하는지 모르겠습니다. 찾아 들어가면 결국 마지막에
asm volatile("\n->" #sym "%0" #val :: "i" (val)) 나옵니다. 이건 또 어떤 문법인지..제가 C언어를 못하는건지 아니면 어셈인지.. 파악을 못하겠습니다. 도움좀 부탁드립니다.
Forums:
어셈블리입니다.
어셈블리입니다.
asm 명령어는 c에서 어셈으로 코딩 할 때 사용하는 것이고,
mov 명령어들은 값을 복사하는 어셈명령어입니다.
더 자세한 내용은 저도 고수님들을 기다려야겠네요 ^^;;
TASK_threadsp 는 태스크 디스크립터 thread.sp 주소 오프셋입니다
컨택스트 스위칭을 할 때 레지스터 세트를 프로세스 만의 공간에 저장하거나 로딩합니다.
해당 코드는 관련 동작인데, TASK_threadsp 는 태스크 디스크립터 구조체 기준으로 thread.sp 주소 오프셋을 의미합니다.
관련 코드를 조금 더 보겠습니다.
다음은 struct task_struct 구조체인데 struct thread_struct 타입인 thread 필드가 있습니다.
struct thread_struct 구조체를 보면 sp 필드가 있습니다.
이해하기 쉽게 코드로 표현하면 다음 수식이 되겠군요.
(개인블로그)
http://rousalome.egloos.com
답변 감사합니다. 안 그래도 커널 접하고 우연히
답변 감사합니다. 안 그래도 커널 접하고 우연히 Austin Kim님 블로그를 알게되어서 4장 프로세스부터 공부하고 있었습니다. 여기서 답변을 해주실줄이야... 감사합니다.
도움이 됐다고 하시니 뿌듯하군요...
도움이 됐다고 하시니 뿌듯하군요. 제 블로그 자주 오셔서 유용한 정보 얻어 가시길 빕니다.
(개인블로그)
http://rousalome.egloos.com
댓글 달기