处理器与linux内核之间的配合

Linux中的段

Linux source code (v2.6.10) - Bootlinhttps://elixir.bootlin.com/linux/v2.6.10/source

https://blog.csdn.net/fervor_heart/article/details/12580391https://blog.csdn.net/fervor_heart/article/details/12580391

PST优先搜索树原理及程Linux内核中的应用浅析 - 道客巴巴https://www.doc88.com/p-2738210321121.html?r=1 基数树原理及在Linux内核中的应用分析 - 豆丁网https://www.docin.com/p-824982667.html

https://blog.csdn.net/21cnbao/article/details/103470878https://blog.csdn.net/21cnbao/article/details/103470878

Java共享内存 - swbzmx - 博客园1 共享内存对应应用开发的意义 对熟知UNIX系统应用开发的程序员来说,IPC(InterProcess Communication)机制是非常熟悉的,IPC基本包括共享内存、信号灯操作、消息队列、信https://www.cnblogs.com/swbzmx/p/5992247.html

块设备文件的readpage方法_uestc-leon的博客-CSDN博客_async page read块设备文件的readpage方法总是相同的。都是有blkdev_readpage( )函数实现的,它实际调用block_read_full_page( ):static int blkdev_readpage(struct file * file, struct page * page){ return block_read_full_page(page, blkdev_get_blockhttps://blog.csdn.net/weixin_36145588/article/details/74937592

普通文件的readpage方法(do_mpage_readpage)_uestc-leon的博客-CSDN博客当所读文件所在的块并不在页高速缓存,我们需要使用readpage方法把页从磁盘读到内存中来,并加入到页缓存中去。 address_space对象的readpage方法存放的是函数地址,这种函数激活从磁盘到页高速缓存的io数据传送。对于普通文件,这个字段通常指向调用mpage_readpage( )函数的封装函数。如ext2文件系统的readpage方法:static int ext2_readpahttps://blog.csdn.net/weixin_36145588/article/details/74990382

https://blog.csdn.net/hui6075/article/details/51386225https://blog.csdn.net/hui6075/article/details/51386225

 通过linux源码详解socket的阻塞和非阻塞 - 知乎linux服务器开发相关视频解析: 360度无死角讲解进程管理,调度器的5种实现 支撑亿级io的底层基石 epoll实战揭秘c/c++ linux服务器开发免费学习地址: c/c++ linux后台服务器高级架构师从 linux 源码看 socket 的…https://zhuanlan.zhihu.com/p/371129083

 ldd3学习笔记--环境搭建(构建linux2.6.10源码树)_zjy900507的博客-CSDN博客ldd3(《linux设备驱动程序》)里面使用的正是Linux2.6.10内核,如果内核不同,使用课本里的代码会出现各种问题,所以搭建与课本一样内核版本的环境,用来学习。尝试过使用ubuntu14.04、fedora21直接编译2.6.10内核,结果都是gcc版本太高,尝试过给gcc降级,各种失败。尝试在ubuntu9.04 ,10.04编译他们各自的内核版本,构建内核源码树,结果Ldd3...https://blog.csdn.net/zjy900507/article/details/94168637

Linux 通用块层 bio 详解 – 字节岛技术分享[toc] Linux Block 层在 Linux 内核设计之初就作为几大子系统存在,当然这也是得益于他的前辈 Unix 等优秀的设计。作为 IO 子系统的中间层,他为上层输出接口,为下层提供数据,像个勤劳的小蜜蜂,本文介绍通用块层中的最具传奇色彩的 bio,他就像是一个原子,是在整个 block 层的最小单位,不可分割。 bio 的组成 作为最小单位以及传输介质,那么具体应该长得如何?他又承载着那些信息? struct bihttps://www.byteisland.com/linux-%E9%80%9A%E7%94%A8%E5%9D%97%E5%B1%82-bio-%E8%AF%A6%E8%A7%A3/

Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程_MaHua的博客-CSDN博客_轻量级进程一、定义再看正文之前我要先强调一下几点: 1. Linux中没有真正的线程,但windows中确实有线程 2. Linux中没有的线程是由进程来模拟实现的(又称作:轻量级进程) 3. 所以在Linux中(在CPU角度看)进程被称作轻量级进程(LWP) 由于Linux下没有真正的线程,只有所谓的用户级线程,线程在CPU地址空间内运行关于进程(PCB)、轻量级进程https://blog.csdn.net/mm_hh/article/details/72587207

get_block 函数把相对于文件开始位置的块号转换为相对于磁盘分区中块位置对应的逻辑块号

进程等待队列的散列表,这些进程正在等待管理区中的某页

 

 

内核栈与thread_info结构详解 - Yungyu - 博客园本文转载自内核栈与thread_info结构详解 什么是进程的内核栈? 在内核态(比如应用进程执行系统调用)时,进程运行需要自己的堆栈信息(不是原用户空间中的栈),而是使用内核空间中的栈,这个栈就是进https://www.cnblogs.com/yungyu16/p/13023982.html

Linux中的进程栈和线程栈-lvyilong316-ChinaUnix博客Linux中的进程栈和线程栈http://blog.chinaunix.net/uid-28541347-id-5832569.html

如何使用内核栈 

进程切换与TSS_nodeathphoenix的专栏-CSDN博客[转] http://www.eefocus.com/article/09-06/74895s.html Intel i386 体系结构包括了一个特殊的段类型,叫任务状态段(TSS),如图5.4所示。每个任务包含有它自己最小长度为104字节的TSS段,在/include/ i386/processor.h 中定义为tss_struct结构:struct tss_sthttps://blog.csdn.net/nodeathphoenix/article/details/39269997

引用上文 

那么,进程到底是怎样进行切换的?

从第三章我们知道,在中断描述符表(IDT)中,除中断门、陷阱门和调用门外,还有一种“任务们”。任务门中包含有TSS段的选择符。当CPU因中断而穿过一个任务门时,就会将任务门中的段选择符自动装入TR寄存器,使TR指向新的TSS,并完成任务切换。CPU还可以通过JMP或CALL指令实现任务切换,当跳转或调用的目标段(代码段)实际上指向GDT表中的一个TSS描述符项时,就会引起一次任务切换。

Intel的这种设计确实很周到,也为任务切换提供了一个非常简洁的机制。但是,由于i386的系统结构基本上是CISC的,通过JMP指令或CALL(或中断)完成任务的过程实际上是“复杂指令”的执行过程,其执行过程长达300多个CPU周期(一个POP指令占12个CPU周期),因此,Linux内核并不完全使用i386CPU提供的任务切换机制。

由于i386CPU要求软件设置TR及TSS,Linux内核只不过“走过场”地设置TR及TSS,以满足CPU的要求。但是,内核并不使用任务门,也不使用JMP或CALL指令实施任务切换。内核只是在初始化阶段设置TR,使之指向一个TSS,从此以后再不改变TR的内容了。也就是说,每个CPU(如果有多个CPU)在初始化以后的全部运行过程中永远使用那个初始的TSS。同时,内核也不完全依靠TSS保存每个进程切换时的寄存器副本,而是将这些寄存器副本保存在各个进程自己的内核栈中(参见上一章task_struct结构的存放)。

这样以来,TSS中的绝大部分内容就失去了原来的意义。那么,当进行任务切换时,怎样自动更换堆栈?我们知道,新任务的内核栈指针(SS0和ESP0)应当取自当前任务的TSS,可是,Linux中并不是每个任务就有一个TSS,而是每个CPU只有一个TSS。Intel原来的意图是让TR的内容(即TSS)随着任务的切换而走马灯似地换,而在Linux内核中却成了只更换TSS中的SS0和ESP0,而不更换TSS本身,也就是根本不更换TR的内容。这是因为,改变TSS中SS0和ESP0所化的开销比通过装入TR以更换一个TSS要小得多。因此,在Linux内核中,TSS并不是属于某个进程的资源,而是全局性的公共资源。在多处理机的情况下,尽管内核中确实有多个TSS,但是每个CPU仍旧只有一个TSS。 

Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈_木易博客专栏-CSDN博客_线程栈转载请注明出处: https://yakir-yang.github.io/ 栈是什么?栈有什么作用?首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。https://blog.csdn.net/yangkuanqaz85988/article/details/52403726

TSS的作用 - Fan Zhang - 博客园本来intel设计TSS的初衷是想通过这个段,来实现操作系统中多任务的切换。但据说使用这个切换任务,会占用很多cpu的时间,并且打破cpu的流水。因而,linux和windows都没有采用tss用作切https://www.cnblogs.com/fanzi2009/archive/2009/05/27/1490904.html

 特权级与TSS_SrcMiLe的博客-CSDN博客TSS,即Task State Segment,意为任务状态段,和特权级有着密不可分的联系,是处理器在硬件层面上原生支持多任务的一种数据结构https://blog.csdn.net/weixin_46322986/article/details/123164789

Linux内核TSS的使用 - Daniel King - 博客园参见文章:http://blog.chinaunix.net/uid-22695386-id-272098.html linux2.4之前的内核有进程最大数的限制,受限制的原因是,每一个进程都有自已的https://www.cnblogs.com/long123king/p/3501853.html 

Linux内存管理 -- 白话Linux page cache / swap cache/页框回收_猿来如此yXy-CSDN博客文章目录Linux内存管理 -- 白话页框回收什么是Page Cache?什么是Swap Cache?什么是buffer Cache?Linux内存管理 – 白话页框回收经过前面几篇博客翻译和阅读Understaning Linux Virtutal Memory Manger,对于Linux页框回收有了一些基本的理解。现在自己再来对照Linux kernel2.6.9源码来做一些总结。什么...https://blog.csdn.net/weixin_38537730/article/details/104339352

 switch_to的时候tss中ep0被换成新的内核栈

 

中断栈

软中断 和 硬中断栈 

 创建进程描述符

内核栈创建 

load_esp0 

创建slab 

Linux内核中双向链表的经典实现 - 如果天空不死 - 博客园概要前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中https://www.cnblogs.com/skywang12345/p/3562146.html

container_of 

container_of()详解_DODO~下雨不打伞-CSDN博客​原地址:http://radek.io/2012/11/10/magical-container_of-macro/当你开始内核编程的时候,你会随便看看代码,那么你可能很快就会碰到这个神奇的预处理代码结构。它是用来干嘛的?正如它的名称那样,它获取的是它的容器的地址。该函数需要三个变量--指针,容器的类型,指向成员的指针。(译者注:最终返回的是,该成员所处的结构体的指针。知道成员的指针https://blog.csdn.net/murphykwu/article/details/47417047

一网打尽 

Linux中断一网打尽(1) —— 中断及其初始化 - 简书[toc] Linux中断一网打尽 —— 中断及其初始化 前情提要 通过本文您可以了解到如下内容: Linux 中断是什么,如何分类,能干什么? Linux 中断在计算机启动...https://www.jianshu.com/p/84c6127dcc10

ldd3学习笔记--环境搭建(构建linux2.6.10源码树)_*的专栏-CSDN博客_ldd3ldd3《Linux设备驱动程序(第三版)》使用的内核是linux-2.6.10,所以想要搭建一个该版本的内核,方便学习。 //************************************************************************************************* 环境:虚拟机中运行Fedora Core 3 下载地址: Fedorahttps://blog.csdn.net/u013162593/article/details/45252383 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值