Linux Kernel 1.0

本文介绍了C语言中堆栈的基本概念及其作用,并通过一个简单实例进行了说明。此外,还探讨了操作系统中内核态与用户态的区别,特别是在32位x86架构下Linux系统中的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值