
进程与内存
文章平均质量分 81
Linux_Drv
本人对linux内核驱动有浓厚的兴趣,欢迎大家加我qq
展开
-
进程与内存2-内核线程应用(简单实例)
这个节是建立内核线程的例子(linux-3.2.36)就是循环打印,有几个宏我说明一下KERNEL_THREAD: 用kernel_thread()建立线程KTHREAD_CREATE: 用kthread_create()建立线程REALTIME_THREAD:使用fifo调度策略CNT:打印的次数,自己玩玩吧,不多说了。#include #include /原创 2013-12-09 09:39:38 · 2058 阅读 · 0 评论 -
进程与内存10-高速缓存5(linux提供的操作接口)
要到年底了,忙的要死。这次我就偷偷懒了。只做一些提示,有兴趣看看。欢迎讨论!简单开场白:从之前的分析看,为了提高磁盘或内存的访问速度,都造成了同一数据会在不同的介质中同时存在。那么就可能因为某种原因造成数据不一致。对于硬件cache,如果是数据和指令分类的Cache分开,那么指令cache中的指令与数据cache中的数据之间也要一致。问题会更复杂。对应用层来说这些都是透明的,但是对原创 2013-12-27 09:35:16 · 1603 阅读 · 0 评论 -
进程与内存5-mmap实现2(remap_pfn_range方法原理及实例)
这一篇是说mmap()的另一种实现方法,利用remap_pfn_page一次性映射。 先简单看看remap_pfn_page的源代码吧。这个代码有些函数基于平台基于版本。我的平台:arm920tlinux-3.2.36。先对参数解读:vma:用户层使用的vmaaddr:用户的起始地址pfn:内核空间的物理地址(内核这么写的)。我觉得只能说是内核空间地址。size:映射大原创 2013-12-16 17:07:18 · 6968 阅读 · 1 评论 -
进程与内存6-高速缓存1(每CPU页框高速缓存和内存高速缓存)
首先我提几个主题:磁盘高速缓存、内存高速缓存、硬件高速缓存、每cpu页框高速缓存、页高速缓存、目录项高速缓存、索引节点高速缓存、转换后援缓冲器(TLB)、哈佛结构的高速缓存、写缓冲器、高速缓存一致性、L1和L2等高速缓存在驱动的使用。 上面这些就我在接下来的文章中要讨论的东西。如果您对上面的东西了如指掌,请接受的叩拜!真心希望您能给本屌丝指点指点。高速缓存大家喜欢叫cache。对于原创 2013-12-24 15:15:20 · 2778 阅读 · 0 评论 -
进程与内存8-高速缓存3(页高速缓存)
页高速缓存是linux内核所使用的主要磁盘高速缓存。在绝大多数情况下,内核在读写磁盘时都引用页高速缓存。新页被追加到页高速缓存以满足用户态进程的读请求。如果页不在高速缓存中,新页就被加到高速缓存中,然后用从磁盘读出的数据填充它。如果内存有足够的空闲空间,就让该页在高速缓存中长期保留,使其他进程再使用该页时不再访问磁盘。这样的机制也会引入类似“脏”字段来处理一致性。在此之前的高速缓存都是软件的机原创 2013-12-24 16:55:01 · 1295 阅读 · 0 评论 -
进程与内存7-高速缓存2(目录项高速缓存、索引节点高速缓存和磁盘高速缓存)
首先明白这两个概论:下面是我以前写的博客vfs中的话a. 超级块对象struct super_block:对应于存储特定文件系统的信息(如文件系统类型、文件大小上限、设备标识符等),磁盘文件放在特定扇区中,特殊文件如sysfs放在内存中,掉电后完完了。b. 索引节点对象struct inode:包含了内核在操作文件或目录时需要的全部信息。它表示文件类型、引用计数、访问时间等,如i_原创 2013-12-24 15:16:46 · 1838 阅读 · 0 评论 -
进程与内存9-高速缓存4(硬件高速缓存)
这篇主要是讲cache的基础知识,从网上也可以搜到相关的。Cache的作用:为了缩小cpu和ram之间的速度不匹配,引入了硬件高速缓存内存。它基于著名的局部性原理。Cache的分类:a. 统一的。指令和数据用同一个Cache。b. 指令和数据分开的。有时这种组织方式也被称为改进的哈佛结构。 L1\L2\L3 cache的解释:L1 Cache(一级缓存)是CPU第一原创 2013-12-25 15:25:22 · 2055 阅读 · 0 评论 -
进程与内存4-mmap实现1(nopage方法原理及实例)
假设现在有个有个驱动,有一段内存叫做sh_mem。当用户打开这个文件并mmap。mmap要做什么,当然是建立用户态的地址与此驱动建立对应关系。我知道的有两种:1. 我们给用户提供一个方法,如果你要用这个内存时才会映射。这就是请页机制。2. 我们一次映射好。这篇文章,我们先讲第一种,实验:arm平台linux-3.2.36如果你只想看看nopage使用方法,就直接倒下面代码去。中间就原创 2013-12-13 15:50:07 · 4582 阅读 · 0 评论 -
进程与内存3-内存管理(解析并获取高低端内存)
ldd3的一段话:高效的块驱动对于性能是重要的 -- 不只是为在用户应用程序的明确的读和写. 现代的有虚拟内存的系统将不需要的数据移向(希望地)二级存储中, 它常常是一个磁盘驱动器. 块驱动是核心内存和二级存储之间的导管; 因此, 它们可组成虚拟内存子系统的一部分. 虽然可能编写一个块驱动不必知道 struct page 和其他重要的内存概念, 任何需要编写一个高性能驱动的人必原创 2013-12-11 14:23:30 · 2328 阅读 · 4 评论 -
进程与内存1-内核线程建立
以前写的东西,感觉写的过于繁琐,从这以后尽量写的简洁明朗一点,也有助于我自己以后再看。(内核版本linux-3.2.36)我们要解决的问题。1. 简单描述内核线程创建过程。2. 为什么kthread_create()调用后,我们还要调用wake_up_process来唤醒调用我们的线程函数,用户态并不需要。 kthread_create(threadfn,原创 2013-12-03 11:03:32 · 1689 阅读 · 0 评论 -
详细分析contrex-A9的汇编代码__switch_to(进程切换)
//函数原型:版本linux-3.0.8struct task_struct *__switch_to(structtask_struct *,struct thread_info *, struct thread_info *); #define switch_to(prev,next,last) \原创 2014-07-08 14:48:05 · 3057 阅读 · 0 评论