Linux Kernel 1.0

1.C语言中堆栈的作用是什么?请使用一个实例说明C语言中堆栈的某一个作用。
2.为什么要有内核态与用户态的区别?请结合32位x86说明在Linux中,用户态与内核态有哪些区别?在什么情况下,系统会进入内核态执行?

C语言中的堆栈(Stack)主要用来维持函数调用的执行上下文,包括保存调用函数的返回地址,栈基地址,函数参数以及被调函数的局部变量等等。
例如代码
int a() { int var; var =0; return var;} 函数中变量var的值即是保存在stack上。

大部分OS都有内核态和用户态的区别,主要原因是OS需要通过这种访问权限控制防止用户程序有意或者无意的破坏OS的内部数据。OS负责维护计算机中的所有硬件,向用户提供服务,对硬件不正确的访问可能导致整个系统的崩溃,所以不运行用户程序随意访问而使用内核态进行隔离。
对于32bit 的X86,用户态和内核态运行在不同的CPU特权级上,Intel X86有四个特权级,内核态运行在0特权级,用户态运行在3特权级。0特权级可以任意切换到3特权级,但是3特权级只能通过某些方式进入0特权级,从而实现的权限隔离。当前CPU特权级可以用代码段段选择子的最低两bit指示,CS=8‘bxxxxxx00表示0特权级,CS=8'bxxxxxx11表示3特权级。由3特权级进入0特权级的方式有中断,异常和系统调用。

===> GCC: 把C,C++等源代码编译至目标文件。
gcc -v  / -x cpp-out / -S / -o / -x assembler/ -c

===> BInuilts: ar ld asm objdump(-h / -f )  objcopy/ strip /nm /  ld

===> gdb: qemu -kernel arch/x86/bott/bzimage -s -S.     -s: shortcup for -gdb tcp:1234; -S : freeze CPU at start up.
gdb --> target remote:1234--> file vmlinuz加载符号表 ---> open the debug info options when compiling.  ---> set break point with symbol --> kernel hancking->complie the kernel with debug info

你可能感兴趣的:(Linux,Tips,Kernel)