- 博客(19)
- 资源 (1)
- 收藏
- 关注

原创 导读
内存管理1. JMP指令进程调度1. 系统寄存器和数据结构2. 进程-1:定义及其结构3. 进程-2:进程上下文和中断上下文4.进程-3: fork()函数5. switch_to(n)函数并发与竞争1. 并发与竞争2. 自旋锁
2012-04-22 19:55:31
363

原创 前言
1. 关于tynew名字的说明T: WHATY: WHYN: WHENE:WHEREW: HOW在操作系统的发展中,非常讲究缘由,一个概念的提出,都有其历史背景,所以说想理解其真正的精髓,你一定要追逐起源,理解其发展的过程。在寻其本质的过程中,你就会提出各种各样的问题。而你提出问题水平代表了你对这个东西的理解程度。我把提出的问题的方式简单归纳出了5个单词
2012-04-22 10:45:36
321
原创 系统调用
i. 系统调用产生的原因为了用户空间和内核空间运行的进程进行交互,内核提供了一组接口。通过该接口,应用程序可以访问硬件设备和其他操作系统资源。这组接口就是系统调用。系统调用在用户空间进程和硬件设备之间添加了一种中间层。主要作用有三个:1. 为用户空间提供了硬件的抽象接口。把用户从学习硬件设备的低级编程特性中解放出来。2. 系统调用保证了系统的稳定和安全。内核
2012-12-03 15:53:17
1309
原创 下半部
i. 下半部1. 下半部执行与中断处理密切相关但中断处理程序本身不执行的工作。2. 为什么用下半部中断处理流程(上半部)的局限性:a) 中断处理程序以异步方式执行并且可能会打断重要代码(也有可能是其他中断处理程序)的执行。为了避免被打断的代码停止时间过长,中断处理程序执行得越快越好。b) 如果当前有一个中断处理程序正在执行,在最好的情况下,该中断同级的其他中断会被屏
2012-11-29 07:18:36
1812
转载 中断处理
作者:刘昊昱 博客:http://blog.youkuaiyun.com/liuhaoyutz编译环境:Ubuntu 10.10内核版本:2.6.32-38-generic-paeLDD3源码路径:examples/short/ 本分析LDD3第9和第10章的示例代码short。short涉及的主要知识点有通过I/O端口或I/O内存操作设备寄存器及设备内存,注册中断处理函数处理中
2012-11-23 10:58:38
1448
原创 中断
i.中断1. 中断定义:中断是一种电信号,由硬件设备生成,并直接送入中断控制器的输入引脚上。再由控制器向处理器发送相应的信号。处理器一经检测此信号,便中断自己当前的工作转而处理中断。处理器通知操作系统已经产生中断,这样操作系统开始对此中断进行适当的处理。2. 产生中断的原因:Linux内核管理连接到计算机上的硬件设备。由于在处理器和硬件设备相互通信时,处理器的速度往往比
2012-11-23 10:44:15
1503
原创 Linux内核内存分配函数
i. 分配函数的选择kmalloc():如果需要连续的物理页,可以使用此函数,这是内核中内存分配的常用方式,也是大多数情况下应该使用的内存分配方式。传递给函数的最常用的标志是GTP_ATOMIC和GTP_KERNEL。前面的标志表示进行不睡眠的高优先级分配。在中断处理程序和其他不能睡眠的代码段中需要。后面的标志可以睡眠,在没有持自旋锁的进程上下文中使用。此函数返回内核逻辑地址。get_
2012-11-23 09:58:53
4250
转载 Linux用户空间与内核空间
1. Linux内核地址空间划分通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。2. Linux内核高端内存a) 由来当内核模块代码或线程访问内存时,代码中的内存地址都为逻辑地址,而对应到真正的物理内存地址,需要地址一对一的映射,如
2012-11-21 15:30:39
1536
原创 bus, device, driver 三者之间的关系
1. 总线,设备和驱动总线:一个总线是处理器和一个或多个设备之间的通道. 为设备模型的目的, 所有的设备都通过一个总线连接, 甚至当它是一个内部的虚拟的,"平台"总线。设备:设备就是连接在总线上的物理实体。设备是有功能之分的。具有相同功能的设备被归到一个类(CLASS)中.在Linux 系统中,每个设备由一个 struct device 代表。驱动:驱动程序是在CPU运行时,提供操
2012-11-21 10:34:07
4257
转载 Linux设备模型分析之kset
作者:刘昊昱 博客:http://blog.youkuaiyun.com/liuhaoyutz内核版本:2.6.36 上一篇博客我们分析了Linux设备模型中kobject的注册和使用,在这一篇文章中,我们来看一下kset的用法。首先我们看一个使用kset的例子,代码如下:[cpp] view plaincopy#include #include #include #
2012-11-21 10:12:09
1557
转载 Linux设备模型分析之kobject
作者:刘昊昱 博客:http://blog.youkuaiyun.com/liuhaoyutz内核版本:2.6.36 一、kobject应用举例Linux设备模型最基本的组成元素是kobject,我们先来看一个kobject的应用例子,该程序在Ubuntu 10.10, 2.6.32-38-generic-pae内核上调试通过。[cpp] view plaincopy#inclu
2012-11-21 10:08:59
1617
原创 进程-2:进程上下文和中断上下文
1. CPU的状态CPU总是处于以下3种状态的一种:a) 内核态,运行于进程上下文,内核代表进程运行于内核空间;b) 内核态,运行于中断上下文,内核代表硬件运行于内核空间;c) 用户态,运行于用户空间。2. 进程上下文它是一种内核所处的操作模式,此时内核代表进程执行系统调用或运行内核线程。既然代表进程,那么就用
2012-11-10 20:56:35
1418
原创 switch_to(n)函数
这篇文章我们来分析switch_to()函数, 分析的代码取自linux kernel 0.11 sched.h文件, 我们只为说明原理, 所以尽量简单. 其中代码注释参考了赵炯老师一书, 言归正传,下面来看switch_to()函数.switch_to(n)将切换当前任务到任务n.首先检测任务n是不是当前任务,是则直接退出.输入: %0 – 指向_tmp
2012-05-20 20:23:15
2636
原创 JMP指令
在读代码的时候,Jump指令用的特别多, 在中断/异常, 虚实地址转换, 任务切换等等等等,都用到了Jump指令,今天我们来讨论一下究竟Jump都做了什么事情.下面用伪指令来描述Jump做了什么事情, 又是怎么区分这些事件的JMP(SelectorType Selector, int Offset){ SegAttributes Attributes; Selecto
2012-05-20 15:59:40
1445
原创 进程-3:fork()函数
1. 示例程序#include ; #include ; main () { pid_t pid; pid=fork(); if (pid < 0) printf("error in fork!"); else if (pid == 0) printf("i am
2012-04-22 19:40:15
400
原创 进程-1: 进程定义及其结构
1. 定义进程是处于执行期的程序以及它所包含资源的总称。2.组成部分进程可分为两个部分:进程执行空间和任务状态段TSS。进程执行空间包含代码段,堆栈段和数据段,还有为各个特权级所需的独立的堆栈空间。其中Stack0中分配了task_struct 数据结构,包含了进程随需的资源:如打开的文件,进程的地址空间,挂起的信号,进程的状态,还有tss等。TSS指定
2012-04-21 21:53:47
578
原创 自旋锁
1. 定义一个自旋锁是一个互斥设备,它只能有两个值:“锁定”和“解锁”。如果锁可用,则“锁定”位被设置,而代码继续进入临界区;相反,如果锁被其他人获得,则代码进入忙循环并重复检查这个锁,直到该锁可用为止。这个循环为“自旋”2. 实现 "\n1:\t" lock " ; decb %0\n\t"
2012-04-19 20:59:33
335
原创 并发与竞争
1. 并发和竞争 用现实情况说明一下,如下图: 如果ATM取钱或者Shopping刷卡是同时发生的,如果银行没做任何处理,则会出现如上情况。 但银行是如何防止这样的事情发生的呢? 很简单,在判断银行账户余额之前,只需冻结其账户,只能由一个人访问和操作,等这个人操作结束之后再由其
2012-04-18 20:11:54
529
原创 系统寄存器和数据结构
以下这张图包含了内存管理,进程调度和中断精髓,如果完全理解好了这张图,那么对你来说,操作系统无任何神秘感。在以后的文章,我会经常引用此图。PS: 这张图是来自Intel Volume 3A: System Programming Guide, Part 12-3 fiugre 2-1, 按照我的理解我做了一些颜色的添加,便于理解
2012-04-15 15:32:35
538
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人