TSS 内核栈 用户栈的关系】的更多相关文章

http://blog.sina.com.cn/s/blog_673ef8130100qaje.html 该博客不错,有不少有用的信息 中断程序的一开始我们执行一个PUSHALL,把这些积存器保存在核心栈中,中断结束返回前我们执行一个POPALL将保存在栈中的值弹出到各寄存器. 中断发生时会进行一个栈的切换,会将esp置成tss->esp0,在2.4内核中就是task struct中的thread->esp0,也就是我们所说的核心栈.  中断完成后返回时也会进行一个栈切换,将esp置成tss-…
转自:http://www.kerneltravel.net/kernel-book/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E8%BF%9B%E7%A8%8B%E6%8F%8F%E8%BF%B0/4.4.1.htm 4.4.1进程内核栈 每个进程都有自己的内核栈.当进程从用户态进入内核态时,CPU就自动地设置该进程的内核栈,也就是说,CPU从任务状态段TSS中装入内核栈指针esp(参见下一章的进程切换一节). X86内核栈的分布如图4.2所示:              …
 先说明两个概念:中断和系统调用 一 系统调用: 是应用程序(运行库也是应用程序的一部分)与操作系统内核之间的接口,它决定了应用程序是如何和内核打交道的. 1,  Linux系统调用:2.6.19版内核提供了319个系统调用.比如 exit fork read open close …… 2,  对Windows来说,操作系统提供给应用程序的接口不是系统调用,而是API.比如:ReadFile.我们暂时把API和系统调用等同起来 3,  Linux中,每个系统调用对应一个系统调用号,内核维护了一…
转载自:http://linux.cn/article-3475-1.html 在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32. 每一个进程的生命周期内,其生命周期的范围为几毫秒到几个月.一般都是和内核有交互,例如用户空间程序使用系统调用进入内核空间.这时使用的不再是用户空 间的栈空间,使用对应的内核栈空间.对每一个进程来说,Linux内核都会把两个不同的数据结构紧凑的存放在一个单独为进程分配的存储…
开头赞美THU给我们提供了这么棒的资源.难是真的难,好也是真的好.这种广查资料,反复推敲,反复思考从通电后第一条代码搞起来理顺一个操作系统源码的感觉是真的爽. 1. 操作系统镜像文件ucore.img是如何一步一步生成的? 这makefile文件逻辑简略着看都能明白,仔细了瞧却处处有疑问,有的地方还用到了二重展开.对于初学者来讲,细读这东西太痛苦了,还是简略着读吧. # create kernel target kernel = $(call totarget,kernel) $(kernel)…
转自:http://19880512.blog.51cto.com/936364/274610 最近linux内核的中断部分,总是被书里的栈弄晕,一会儿内核栈,一会儿用户栈的……很是崩溃,在网上google了一下 找了一篇不错的文章拿来分享.   5.8 Linux 系统中堆栈的使用方法 本节内容概要描述了Linux内核从开机引导到系统正常运行过程中对堆栈的使用方式.这部分内容的说明与内核代码关系比较密切,可以先跳过.在开始阅读相应代码时再回来仔细研究. Linux 0.12系统中共使用了4种堆…
Linux 进程栈和线程栈的区别 http://www.cnblogs.com/luosongchao/p/3680312.html 总结:线程栈的空间开辟在所属进程的堆区,线程与其所属的进程共享进程的用户空间,所以线程栈之间可以互访.线程栈的起始地址和大小存放在pthread_attr_t 中,栈的大小并不是用来判断栈是否越界,而是用来初始化避免栈溢出的缓冲区的大小(或者说安全间隙的大小) 进程内核栈.用户栈 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同事,会为进程创…
[0]概念定义 0.1)一致代码段: 简单理解,就是操作系统拿出来被共享的代码段,可以被低特权级的用户直接调用访问的代码, 但是特权级高的程序不允许访问特权级低的数据. 通常这些共享代码,是"不访问"受保护的资源和某些类型异常处理.比如一些数学计算函数库,为纯粹的数学运算计算, 被作为一致代码段. 一致代码段的限制作用 1.特权级高的程序不允许访问特权级低的数据:核心态不允许调用用户态的数据. 2.特权级低的程序可以访问到特权级高的数据.但是特权级不会改变:用户态还是用户态. 0.2)…
1. 内核栈的分配,即thread_info的分配,是在do_fork->dup_task_struct中分配(默认为2个pages),并赋值给task_struct->stack: 2. 用户栈的分配分两种: 一是pthread create会事先mmap分配好用户栈,传给do_fork->copy_thread:用户栈起始地址会赋值给pt_regs->sp,接着设置内核栈底p->thread.cpu_context.sp = (unsigned long)childreg…
转自:http://blog.csdn.net/u011279649/article/details/18795547 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 应用层怎样使用fork and execve fork的返回值怎样区分0pid fork系统调用的入口参数来自哪里 how to implement do_fork copy_process How to check the kernel stack correctivity How to set the…