Linux内核
BugM
这个作者很懒,什么都没留下…
展开
-
Linux中的分段
Linux中的分段什么是段?有内核数段,内核代码段,用户数据段,用户代码段等,可以帮助理解。三种地址首先要区分一下三种不同的地址:逻辑地址:包含在机器语言指令中用来用来指定一个操作数或一条指令的地址。每个逻辑地址由一个段和段偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离。线性地址:是一个32位无符号整数,可以用来表示高达4GB的地址。物理地址:用于内存芯片级的内存单元寻址,与从微处理器的地址引脚发送到内存总线的电信号相对应。段描述符和GDT、LDT 程序员都应该知道我们原创 2020-08-02 17:29:56 · 581 阅读 · 0 评论 -
linux中的PCB(进程控制块) :task_struct(进程描述符)
linux中的进程控制块task_struct进程就是处于执行期的程序,线程是进程中的活动的对象。每个线程都拥有一个独立的程序计数器(PC)、栈、和一组寄存器。内核调用的对象是线程而不是进程。在Linux中,线程的实现非常独特,从内核的角度讲,linux并没有线程的概念。Linux把所有的线程都单过进程来实现,内核没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程,每个线程都拥有自己的task_struct。进程和线程都是通过系统调用clone(原创 2020-08-02 15:15:07 · 1216 阅读 · 3 评论 -
函数调用的过程以及栈中的状态
过程(函数)调用时的栈(运行时栈)运行时栈每个进程都有自己的栈空间,x86-64的栈向低地址方向增长,而栈栈指针%rsp指向栈顶元素。可以使用pushq和popq(汇编指令)将数据存入栈中或是从栈中取出,将栈指针减小一个适当的量可以为没有指定初始值的数据在站上分配空间。类似地,可以通过增加栈指针来释放空间。当x86-64过程需要的存储空间超出寄存器能够存放的大小时,就会在栈上分配空间。这个部分称为过程的栈帧(stack fram)。为了提供空间和时间效率,x86-64过程只分配自己所需要的的栈帧部分原创 2020-07-21 17:15:23 · 917 阅读 · 0 评论 -
下半部之软中断和tasklet
中断处理及下半部由中断和异常的区别可知,中断处理程序以一部方式执行,并且他有可能会打断其他重要代码(甚至包括其他中断处理程序)的执行。因此为了避免被打断的代码停止时间过长,中断处理程序应该执行得越快越好。中断处理程序不再进程上下文中运行,所以他们不能阻塞,所以他们有很高的的实现要求。操作系统个必须有一个快速、异步、简单的机制负责对硬件做出迅速响应并完成那些时间要求很请严格的操作。因此,整个中断处理流程被分成了两个部分:第一个部分是中断处理程序,内核通过对他的异步执行完成对硬件中断的即时响应。第二部分是原创 2020-07-16 16:27:58 · 339 阅读 · 0 评论 -
中断和异常都是中断!
中断和异常很多时候,我们会在很多地方看到“中断”和“异常”两个概念,他们到底是指什么呢?他们之间有什么区别吗?“中断”和“异常”都是中断!中断(interrupt)通常被定义为一个事件,它可以让处理器停止当前的工作转而运行中断处理的相关程序。在物理上,中断其实就是CPU芯片内外部硬件电路产生的电信号。中断通常分为同步中断和异步中断:同步中断是cpu执行指令出现问题时由CPU控制单元产生的,因为是cpu内部产生的,所以也被称为内中断。之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断原创 2020-07-15 21:31:23 · 1034 阅读 · 1 评论