自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 编写一个系统调用

如何往内核中添加自己写的系统调用?其实步骤非常简单:原文:1.编写一个系统调用;2.在系统调用表末尾加入一个新表项;3.在>中添加一个新的系统调用号;4.重新编译内核;上述工作完成后,就可以在用户程序中使用自己所编写的系统调用了。接下来,我们将逐步分析如何上述步骤。1.编写系统调用我们将要实现一个获得当前进程pid的的系统调用。对于一个进程,我们可以直接通过cu

2014-07-31 20:04:16 2025

原创 关于内核空间地址映射问题

在前面

2014-07-31 19:19:29 974

原创 感受虚拟内存

1,输出每个进程的虚拟内存区域2,在当前进程中给定某个虚拟地址,找出它在那个虚拟区域3,根据当前进程的页表,给定某个虚拟地址,输出映射到的物理地址,若还没有映射,输出缺页。4,在某个虚拟地址上写入自己的数据。5,输出当前进程的四级页表的内容。

2014-07-31 18:02:17 718

原创 centos下vitrualbox 宿主机器共享文件夹

1,到virtualbox的官方网站下载vitrualbox的安装包。 https://www.virtualbox.org/wiki/Downloads选择合适自己的版本2.第二步:安装DKMS内核。    因为VirtualBox默认是在DKMS内核中运行,所以系统需要有DKMS的支持。这里使用yum安装,之前需要安装rpmforge软件仓库,如果没有可以参照“CentOS6.5系统

2014-07-31 17:22:32 661

转载 CentOS6.5安装VirualBox虚拟机软件

CentOS6.5安装VirualBox虚拟机软件  VirtualBox 是一款开源虚拟机软件。VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。Innotek 以 GNU General Public License (GPL)

2014-07-31 15:12:58 664

转载 centos添加用户

测试环境:CentOS 5.51、添加用户,首先用adduser命令添加一个普通用户,命令如下:#adduser tommy//添加一个名为tommy的用户#passwd tommy   //修改密码Changing password for user tommy.New UNIX password:     //在这里输入新密码Retype new UNIX pass

2014-07-31 15:09:45 484

原创 比list_entry更简洁的写法list_for_each_entry

比list_entry更简洁的写法list_for_each_entry在list.h中,处理每个节点,宏list_entry是个好选择,但是需要用到for循环,而宏list_for_each_entry把for和list_entry结合起来了,使用更加方便。list_for_each_entry用法list_for_each_entry(pos,head,member)其中,pos

2014-07-31 10:37:03 1788 1

原创 关于内核数据结构struc list_head的用法。

关于内核数据结构struc list_head的用法。在list.h头文件中,定义了struct list_head这个双向链表结构,它是怎样的呢?Struct list_head{ struct list_head *prev; struct list_head *next;}粗略一看,起始很普通,就是定义了两个指针而已,但是却相当有用。我们平时定义双链表的数据结构的时候,是

2014-07-31 09:43:11 3635

原创 用户内存空间映射mmap函数

用户内存空间映射mmap函数前面已经看到了,虚拟的用户内存空间可以有3G,这么大的空间,我们可以好好利用,比如把某个文件装入到其中某个区域中,而不用在栈区分配空间来放入文件。mmap函数就是干这个的。原型:#includevoid *mmap(void *start,size_t length,int prot,ing flags,int fd,off_t offset)该函

2014-07-30 19:17:43 662

原创 内核模块加载之虚拟内核空间

内核模块加载之虚拟内核空间前面讲过,在32位平台的linux下,0-3G是用户程序可访问的,后面1G是内核空间专用的。那么我们可以来做实验感受一下。当然,写个普通的main函数就能够到达输出0-3G的空间地址,然而内核空间的地址不是用户程序能够访问的,要不就乱套了(其他进程也共享了这片内核空间)。不过,我们可以有办法来输出,那就是利用加载内核模块的方法。首先,我们看看输出用户空间的代

2014-07-29 20:58:28 768

原创 linux有意避开了分段机制

在逻辑地址转为线性地址的时候,我们说过,用段寄存器中的值的前13位当作索引来索引全局描述符表,在linux中,滑稽的是,它有意地采用数值来绕开了分段机制,对内存的管理主要采用了分页机制。是怎样的呢?先看看,linux在GTD中放入了些什么。查看文件 arch/i386/head.S.quad 0x00cf9a000000ffff /* 0x60 kernel 4GB code a

2014-07-29 08:29:42 1807

原创 简单制作Makefile 文件

简单制作Makefile文件通常要制作Makefile是因为要编译链接的源文件较多且相互关联。如在main函数中,调用了swap,print,printstr三个函数,而这三个函数和main函数都分别是放在各自不同的.c文件中的。那么,制作Makefile可以一键生成可执行文件。vim Makefile第一行是希望生成的可执行文件的名字,这里

2014-07-28 16:39:42 2533

原创 读书笔记----xen虚拟化 2

在cup切换进程的时候,cpu是运行在特权级别,这允许它有一些特殊的操作,譬如用物理地址直接访问内存,而这在通常是不被允许的。为了让cpu达到真正的全部虚拟化,有一个人提出了一个概念,他开始把指令分为三种类型。1,特权指令。2,控制指令,用于改变系统种的资源配置,譬如转换虚拟地址到物理地址,与设备通信,操作全局控制寄存器。3,表现指令,随着资源配置的不同而表现出不同的效果,如在虚拟地址

2014-07-28 16:08:00 1208

原创 读书笔记---xen虚拟化

在cup切换进程的时候,cpu是运行在特权级别,这允许它有一些特殊的操作,譬如用物理地址直接访问内存,而这在通常是不被允许的。为了让cpu达到真正的全部虚拟化,有一个人提出了一个概念,他开始把指令分为三种类型。1,特权指令。2,控制指令,用于改变系统种的资源配置,譬如转换虚拟地址到物理地址,与设备通信,操作全局控制寄存器。3,表现指令,随着资源配置的不同而表现出不同的效果,如在虚拟地址

2014-07-28 16:06:54 694

原创 读书笔记----linux kernel design

1.1.1 BIOS启动开始加电,CPU硬件逻辑设计为强行将CS的值位置位0xFFFF,IP的值位0x0000,这样CS:IP就指向了0xFFFF0.这个位置位于BIOS的地址访问。BIOS的rom(0xFE000-0xFFFFF)即BIOS程序的入口地址为0xFFFF0.BIOS的第一条指令就在这里。随着其中的程序的执行,接着屏幕会显示显卡信息,内存信息,即自检的过程。在这期间一

2014-07-28 16:05:35 705

原创 unsigned long unsigned int unsigned

在32位平台

2014-07-28 09:27:59 816

原创 考虑一个线性地址转换物理地址的过程

考虑一个线性地址转换物理地址的过程在32位平台伤,如果一个线性地址位:00011010 0011 1000 0100 1100 0001 0001(a),根据CR3找到页目录(考虑在linux0.1x下面只有一个页目录表的情况下)。根据线性地址的高10位即00011010 00(aa),在页目录表中索引,找到其页表的地址,假设第0001101000项的值位0011

2014-07-26 17:07:13 1744

原创 网线制作

对准 1,橙白2,橙色3,绿白4,蓝色5,蓝白6,绿色7,棕白8,棕色从左到右。 接头要把有柄的一面放在下面,插进入即可。

2014-07-25 19:09:05 427

转载 系统调用的形象解释

用户程序不能直接在磁盘伤写文件,必须请求操作系统来做,通过系统调用。过程:如调用的是write(fd,buf,len,off),首先把fd,buf,len,off放入进程的内核栈stack,然后,把一个与write函数对于的号码(systemcall number)放入stack里面,最后调用int80使得cpu进入内核模式。这个指令会指引cpu执行一段代码

2014-07-25 16:58:19 505

转载 线性地址-2

关于linux内核空间linux内核对整个系统的物理内存是通过类型为struct page的数组mem_map来管理的。系统中的伙伴系统分配算法最终是通过操作这个数组来记录物理内存的分配、回收等操作。在这里不要被系统的高端内存、低端内存等概念搞混淆了,高、低端内存的分类主要在于区分物理内存地址是否可以直接映射到内核线性地址空间中。我们知道,linux的内核地址空间大小为1G(用户空间0~3

2014-07-24 14:27:02 714

原创 分段 分页

插:x86内存管理机制:  分为 分段机制和分页机制分段机制是x86的特殊的段机制。也正是因为x86存在着段机制,故还有一种额外的地址---逻辑地址。(每个进程都有0--4GB的线性地址空间)分段机制将内存划分成以起始地址和长度描述的块。段可以和程序最基本的元素联系起来,因为程序在编译后就划分位了代码段,数据段和栈等,而段机制中刚刚好相应的代码段,数据段 栈段等等。程序中使

2014-07-24 12:15:51 466

转载 物理地址与线性地址详解(转载整理)

物理地址与线性地址详解(转载整理)(2013-10-12 23:26:16)转载▼ 分类:汇编1. Linear Space & PhysicalSpace  在硬件工程师和普通用户看来,内存就是插在或固化在主板上的内存条,它们有一定的容量——比如64MB。但在应用程序员眼中,并不过度关心插在主板上的内存容量,而是他们可以使用的内

2014-07-24 11:03:07 694

转载 GDT LDT -2

段选择器:32位汇编中16位段寄存器(CS、DS、ES、SS、FS、GS)中不再存放段基址,而是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D2位是描述符表引用指示位TI,TI=0指示从全局描述表GDT中读取描述符,TI=1指示从局部描述符中LDT中读取描述符。这些信息总称段选择器(段选择子).段描述符:8个字节64位,每一个段都有一

2014-07-21 15:57:02 534

转载 GDT 与 LDT

GDT 与 LDT很长时间没碰组成原理和操作系统,忘得差不多了,今天学内核需要一些基础知识,搜了些文章补习一下,这篇讲描述符表的文章比较不错:原文地址:http://blog.csdn.net/billpig/article/details/5833980另外,在oldlinux上有一篇帖子也是讨论这个的,看完上面的文章再看这篇帖子就比较明了了:原文地址:http://www.oldlinux.o

2014-07-21 10:46:39 504

转载 virtualbox中复制(共享)原主机文件到虚拟机中。

需要设置数据空间启动virtualbox之后,点击“设置”,在左侧可以看到“共享文件”选项,点击之后,出现设置界面,点击“右侧的带加号的文件夹”,选择你要选择的主机上的文件夹或者驱动器,选择是否为只读,然后保存。重新启动虚拟机,进入安装好的系统里面,比如是xp,启动,有个控制菜单好像是,选择“安装增强功能”,好了之后重新启动系统,右键单击我的电脑,选择“映射网络驱动器’,选virtualbox

2014-07-20 09:58:36 1987

转载 系统调用的原理和实现+添加一个新的系统调用

统调用概述        计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制。也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call)。        系统调用是属于操作系统内核的一部分的,必须以某种方式提供给进程

2014-07-18 17:34:01 2746

转载 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)分类: Unix/Linux 2011-07-25 23:38 39774人阅读 评论(15)收藏 举报vimidetagsautoloadfunction数据库    工欲善其事,必先利其器。一

2014-07-07 18:07:15 584

转载 linux挂载ntfs硬盘

2.2.3使用fsck.ext3对文件系统进行扫描、修复fileserver:~# fsck.ext3  -y /dev/sdb1  ---开始进入扫描、修正文件系统注意红色方框,该位置需要输入yes

2014-07-05 11:45:57 917

转载 .rar 在linux下解压

在liunx下原本是不支持rar文件的,需要安装liunx下的winrar版本,操作如下wget http://www.rarsoft.com/rar/rarlinux-4.0.1.tar.gztar -zxvf rarlinux-4.0.1.tar.gzcd rar make看见下面这些信息就是安装成功了mkdir -p /usr/local/binmkdir -p 

2014-07-04 15:43:32 2867

空空如也

空空如也

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

TA关注的人

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