real_parent, parent, children, sibling같은 멤버가 있는데, 이들은 모두 프로세스의 부모와 자식 관계를 나타낸다.children, sibling는 연결 리스트로 이뤄져있다.stack멤버는 프로세스 스택의 가장 낮은 주소(thread_info 구조체가 위치)를 가리킨다.thread_info 구조체는 프로세스 스택의 가장 낮은 주소에 위치한다.cpu_context라는 멤버는 thread context의 핵심인 레지스터 값들을 저장한다.thread_info는 ISA에 종속적이기 때문에, cpu_context멤버는 없을 수도 있다.task 멤버는 task descriptor를 가리킨다.stmia ip! {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr}
ip는 thread_info구조체의 cpu_context 멤버를 가리킨다.stmia는 여러 레지스터 값을 연속된 메모리 주소에 store하는 명령pc가 아닌 lr을 저장한다.__switch_to()를 호출 했던 곳의 주소(return address)를 store하게 된다.ldm r4, {r4, r5, r6, r7, r8, r9, sl, fp, sp, pc}
r4는 thread_info구조체의 cpu_context 멤버의 주소를 담고 있다.lr값을 pc로 load하게 된다.pc나 lr은 같을지라도 sp가 다르다면, 완전히 다른 실행 흐름을 갖게 된다.cf.
struct task_struct가 리눅스의 PCB(Process Control Block, Task Control Block)이며, Task Descriptor라고 부른다.struct thread_info가 리눅스의 TCB(Thread Control Block)다.