自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 linux内核锁的几点理解

我们知道,在linux内核中,为了防止竞争的产生,需要加锁。我们最常见的是两种锁,信号量的semphore和自旋锁spin_lock。semaphore信号量semaphore这个锁是经常在进程中加上的。那么,当加上这个锁的时候,进程之间仍然可以互相切换。举一个例子,第一个进程拿到了semaphore,进入到了临界区。在临界区内,第一个进程被中断。在中断处理函数中,不能再次使用这个sema

2017-01-09 23:31:31 2215

原创 恨无常

谁都无法接受,谁都不能忍受。 为什么你这么狠心,把大家抛弃。为什么你把别离的痛苦留给身边的人,而独自一人去一个天国。你知道你的离开,对父母,对家人,对朋友,对同学,对同事,是多大的悲痛。我们不要接受这个事实,永远不要。你就是暂时的离开了工作的岗位,你在家里细心养病而已,仅此而已。 我刚来的时候,根据安排,要学习linux驱动,为将来准备做A8的驱动。那个时候,A8子板还没有。jiaj负责画这块板

2016-09-30 19:08:33 431

原创 linux驱动模型中的probe函数调用流程

基于platform模型的驱动模型下的probe函数的调用在linux2.6的内核之上,驱动基于kobject模型,向上搭建驱动模型。本文以platform模型来讨论platform_driver下的probe函数被调用的过程。

2016-09-22 23:08:34 728 1

原创 初秋遇雨

今天,下班的时候,天公作美来了一场秋雨。秋雨来的突然,寒意也加重几分。 突然想,何不尝试写一首诗来记录一下这场雨。于是,互拼乱凑了四行诗。哈哈,肯定是不好,但是总比写出来好啊,就像那句话,聊胜于无。。。黑云压城雷声响, 路上行人桥下藏。 风雨不识来时路, 一场秋思到故乡。

2016-09-07 21:39:54 336

原创

物理原理夏天到了,雷雨总是不期而遇。当雨过天晴,彩虹也常常伴随而来。那么彩虹是如何产生的呢? 摘抄自百度百科: 虹是光线以一定角度照在水滴上所发生的折射、分光、内反射、再折射等造成的大气光象,光线照射到雨滴后,在雨滴内会发生折射,各种颜色的光发生偏离、其中紫色光的折射程度最大,红色光的折射最小,其它各色光则介乎于两者之间,折射光线经雨滴的后缘内反射后,再经过雨滴和大气折射到我们的眼里,由于空气

2016-06-19 13:06:32 743

转载 原码、反码与补码及其意义

转载地址: http://blog.chinaunix.net/uid-495923-id-1989253.html原码、反码与补码及其意义 (1)数值数据的表示 我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值。机器数有固定的位数,具体是多少位与机器有关,通常是8位或16位。机器数把真值的符号数字化,通常用最高位表示符号,0表示正,1表示负。例如,假设机器数为

2016-06-04 13:59:14 573

转载 关于有符号数和无符号数

关于有符号数和无符号数最近,在讨论有符号数和无符号数在计算机中的表示的问题,结果越讨论越乱。而且使用C语言胡乱验证了一番,最后发现使用了C语言的工具,竟然使得数据真正存储的事实更加令人迷惑。从一个侧面也反映了当初学习时的浅尝辄止,和计算机发明者的别具匠心。 在网上找了一些说法,都说的不是太清楚,有一篇文档说的有理有据,贴在此。 地址:http://bbs.csdn.net/topics/2200

2016-06-04 13:53:31 1160

原创 第一讲算法(2)

什么算法?有限的指令集。一堆指令集合来做一些事情。算法一定是在有限步骤之后,要终止。可以有输入或者无输入,但是必须有输出。每一条指令都是明确的选择排序算法的伪码描述:void SelectionSort(int List[],int N){ for(i = 0;i < N;i++) { 从List[i]到List[N-1]找到最小值,并将其位置存储到一个变

2016-05-18 23:17:29 268

原创 第一讲数据结构(2)

什么是数据结构呢?他的概念包括如下三个方面:数据对象在计算机中的组织方式。包括逻辑组织方式和物理组织方式。物理组织方式就是实际的数据对象以何种方式存储在物理内存中;逻辑组织方式是指数据对象之间的逻辑关系。比如,以书为例子。线性结构下,一个ID代表一本书,是一对一的关系。图的结构,则一个类别对应了很多书。只有数据对象还不行,我们还要可以对数据对象进行操作。那么这些操作也应当数据数据结构的一部分。

2016-05-18 22:25:20 338

原创 数据结构第一讲

第一个例子老师以书架上存放书为例子来讨论。 在书架上如何防治书呢?要考虑书的规模。 第一种方案: 放书的方式,随便放 如何查找呢?所有的都要遍历。如果书的规模很大时,找一本书将会花很多时间。第二种方案: 按照字母顺序存储书籍,我们找一本书时,可以按照字母顺序找书,但是放置书的时候,需要后移所有的书籍才能插入进去。也有缺点。第三种方案: 结合实际。我们将书首先归类,将大规模的书籍划分到一个

2016-05-16 23:32:49 643

原创 第四课 初识系统调用

赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 本次课的名称:扒开系统调用的三层皮(上) 我将它理解为初步识别系统调用。系统调用系统调用的实现的实质是软中断,而不是简单的函数调用。为什么这么做呢? 系统的调用的意义如下:把用户从底层的硬件编程中解放出来(不必关注硬件

2016-04-29 22:22:39 373

原创 第三课 熟悉内核源代码

linux源代码目录结构为了熟悉操作系统,我们首先查看linux的源代码目录结构arch是各种架构的芯片的总目录 进入ls后,可以进一步的看到,我们常见的芯片架构。比如我们正在学习的x86的芯片架构,常见的嵌入式的控制芯片arm架构的芯片,mips的架构芯片。 boot目录是用来生成可执行文件的目录。 我们编译x86架构的内核后,生成的镜像文件bzImage就是在这个目录下。includ

2016-04-29 21:54:09 374

原创 第二课 函数调用

三大法宝计算机是如何工作的呢?这里有三大法宝。他们是什么呢?第一个是存储程序计算机,第二个是函数调用堆栈,第三个是中断机制。 存储程序计算机的决定了程序运行了基本方式。堆栈堆栈机制是高级语言得以运行的基础。我们这里主要讲的是栈。堆栈是C语言运行时,必须的一个记录调用路径和参数的空间。对堆栈的使用,是由编译器完成的。所以不同的编译器可能实现堆栈时,实现的方式是不同的。所以我们在编译相同的代码时,使用

2016-04-29 21:26:30 328

原创 第一讲 计算机工作原理

赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 本课程是后来补充进来的,因为错过了提交时间。冯诺依曼体系结构 为了更好的讲清楚计算机的工作原理,老师首先提出了冯诺依曼体系结构这个概念。 从网上总结了部分内容。与冯诺依曼体系结构相对的概念是哈佛体系结

2016-04-26 23:05:10 639 2

原创 linux内核学习总结

赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”课程体会在linux内核分析课程上,老师讲解的课程内容主要是: 目标是为了讲解linux中如何运行可执行程序的,那么需要将可执行程序加载到内核中去,加载后为了运行,必须为这个可执行程序创建一个新的进程。由此,涉及到可执行程序的

2016-04-25 21:42:39 325

原创 说说中断上下文的切换

在深入理解linux内核课程结束之际,我觉得对中断过程的理解,太浅薄。于是又重新将孟宁老师的系统中断部分再一次的听讲了一遍,并希望能够从中理解更多有关中断的处理过程。系统中断在课程中,老师以系统中断为例子讲解。这里我也从系统中断开篇。 当应用程序在应用层调用系统调用时,比如调用了read函数,那么经过库函数sys_call,将会通过int 0x80进入到内核中。此时会发生什么呢? 首先,因为是中

2016-04-24 23:14:16 1438

原创 第八课 linux系统概览(3)

操作系统组成包括:内核和外层程序 目的:与硬件交互,cpu是关键 与用户程序提供执行环境ls命令分析 ls输入 shell程序分析ls 调用系统调用fork,在fork中执行execlv中执行ls的实现。从系统调用返回将会返回到可执行程序的入口函数中或者动态库函数的入口。如何正确的返回将会执行eip中的值。 shell和ls同时执行将可能发生进程调度等等。扩展孟宁老师在开始阶段提高存储程

2016-04-17 00:18:57 459

原创 第八课 linux一般执行过程(2)

进程切换的一般场景分析当前linux系统中正在运行用户态进程X,需要切换到用户态进程Y的时候: 1.用户态进程X正在运行 2.运行的过程当中,发生了中断。中断可以是硬件中断,比如来自了外部的gpio的中断,可以是时钟中断,可以是系统调用。或者可能是异常发生,可以是缺页异常。缺页异常肯定是发生在内核中的。但是此时仍然是当前的进程,我们理解为是当前进程的内核态。在内核态中发生了中断行为。 但是我们

2016-04-16 23:42:07 325

原创 第八课 进程调度过程(1)

schedule进程调度的关键函数是schedule函数,函数原型如下:asmlinkage __visible void __sched schedule(void){ struct task_struct *tsk = current; sched_submit_work(tsk); __schedule();}当进程需要上下文切换的时候,此函数就会被执行。真正的函数实

2016-04-16 22:16:07 494

原创 第七课 程序的加载(5)

gdb的实验跟踪过称: 查看hello的入口地址:readelf -h hello输出图片为: 他的入口地址为 0x8048d0a使用dgb跟踪start_kernel函数的时候,指明了入参中new_ip值为: 由跟踪值和分析值可知两者是一致的。

2016-04-10 16:33:13 378

原创 第七课 程序的装载(4)

本文主要写实验内容源文件创建hello.c,文件内容如下:#include <stdio.h>int main(int argc,char *argv[]){ printf("hello world!\n"); return 0;}预编译,命令:gcc -E -o hello.cpp hello.c -m32生成hello.cpp,在hello.cpp中增加了头文件的说明,内容

2016-04-10 15:02:25 327

原创 第七课 可执行程序的装载(3)

在课程中,老师讲解load_elf_binary函数的时候,elf文件加载位置总是内存中的位置为0x0804 0000的固定位置上。动态链接在load_elf_binary中如果是动态链接时:if (elf_interpreter) { unsigned long interp_map_addr = 0; elf_entry = load_elf_interp(&loc

2016-04-10 00:05:54 275

原创 第七课 可执行程序的装载(2)

可执行程序的装载之前的工作 通过shell程序启动一个可执行程序,shell程序到底做了什么?在执行exec调用可执行程序之前,shell要做哪些工作? 举个例子: ls -l /usr/bin 实际上shell调用了可执行程序ls。-l 和/usr/bin是ls程序的入口参数。shell命令将会调用exec函数并把参数传递给可执行程序的main函数。int execve(const cha

2016-04-09 21:59:06 420

原创 第七课 可执行程序的装载(1)

可执行文件格式在linux下的可执行文件的格式是ELF文件格式,与windows下常见的PE格式是不同的文件类型。 ELF文件是指可执行的可链接的文件。常见的.o文件或者可执行文件都可以是这种文件格式,但是他们又有不同,下面将查看分析他们的不同之处。可重定位的文件 可重定位的文件就是我们常见的*.o目标文件,他包含一段代码和一段数据。用来生成可执行文件或者库文件。这比较好理解。可执行的文件

2016-04-09 18:36:04 324

原创 第六课 linux下进程描述与进程创建

赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次实验课程内容和文章的题目是一致的,包括进程如何描述和进程的创建过程。 在实验中需要我们跟踪fork系统调用过程来验证上述所有的分析。分析task_struct在操作系统下,对一个进程管理,使用结构体来表示一个进程叫做pcb,

2016-04-03 11:06:41 1100

原创 第五课-系统调用跟踪

linux内核跟踪

2016-03-26 17:45:21 443

原创 第一篇博客

第一篇,开篇测试

2016-03-26 15:16:19 259

原创 “Linux内核分析”实验报告

赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 按照实验要求,设置第一个断点,让程序停止在start_kernel的入口函数中 保存图片 进入linux内核的源代码目录下,查看目录结构 arch是各种架构的芯片的总目录,进入ls后,可以进一步的看到,我们常见的

2016-03-13 21:10:08 938

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除