Linux System Programming
文章平均质量分 83
BruceZhang
计算机专业的一个小学生
展开
-
Linux 内核详解以及内核缓冲区技术
Linux 内核简介现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 2 所示。图 2. GNU/Linux 操作系统的基本体系结构 最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口原创 2013-06-08 09:25:10 · 11166 阅读 · 1 评论 -
Linux System Programming --Chapter Six
这一章的题目是--高级进程管理,这篇文章将以书中所叙的顺序进行讲解1、让出处理器Linux提供一个系统调用运行进程主动让出执行权:sched_yield。进程运行的好好的,为什么需要这个函数呢?有一种情况是用户空间线程的锁定。如果一个线程试图取得另一个线程所持有的锁,则新的线程应该让出处理器知道该锁变为可用。用户空间锁没有内核的支持,这是一个最间单、最有效率的做法。但是现在Linux线程实现引入一转载 2013-06-17 14:08:55 · 1668 阅读 · 0 评论 -
Linux 用户进程内存空间详解
经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swapped size (kb)CODE, Code size (kb)DATA, Data+Sta原创 2013-06-08 09:19:37 · 3277 阅读 · 0 评论 -
Linux System Programming --Chapter Nine
这一章的标题是 “信号” ,所以本文将对信号的各个方面进行介绍,由于Linux中的信号机制远比想象的要复杂,所以,本文不会讲的很全面。。。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本转载 2013-06-18 08:41:33 · 1942 阅读 · 0 评论 -
Linux System Programming -- Appendix
这本书附录的名字是 “GCC对C语言的扩展” ,一下的内容是对扩展的总结类型发现GCC 允许通过变量的引用识别类型。这种操作支持泛型编程。在 C++、Ada 和 Java™ 语言等许多现代编程语言中都可以找到相似的功能。Linux 使用 typeof 构建 min 和 max 等依赖于类型的操作。清单 1 演示如何使用 typeof 构建一个泛型宏(见 ./linux/include/linux/转载 2013-06-18 08:41:20 · 1759 阅读 · 0 评论 -
字符编码总结(UTF-8,UNICODE)
UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现。UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最转载 2013-06-13 14:18:03 · 3393 阅读 · 0 评论 -
Linux System Programming --Chapter Seven
文件和目录管理一.文件与其元数据我们首先看一下一个简单的文本文件是怎么保存的:打开vim,编辑一段文本:[root@localhost ~]# vim hello.txt编辑内容如下:opencfg.com is best website for java 查看其属性:[root@localhost ~]# ls -l-rw-r--r-- 1 root root 37 9月 4 19转载 2013-06-17 14:09:28 · 1847 阅读 · 0 评论 -
Linux System Programming --Chapter Four
这一章介绍的主题是--高级文件 I/O一. 分散--聚集I/O分散聚集I/O是一种进行输入和输出的方法。通过此方法,单一系统调用可以将缓冲区向量写入单一数据流,或者将单一数据流读取到缓冲区向量。这个类型的I/O之所以会有此名称,是因为数据会被分散至或聚集自特定的缓冲区向量。这种方式的输入和输出又称为向量I/O。相比较之下,第二章的标准读取和写入系统调用所提供的是线性I/O。这里有两个函数实现了一对原创 2013-06-14 12:20:36 · 2178 阅读 · 0 评论 -
Linux System Programming --Chapter Five
这一章中的内容出现在博主的多篇文章中,所以并不对这一章进行详细的说明解释,只是对几个比较重要的概念进行说明一.写时复制技术COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么原创 2013-06-14 12:20:55 · 2076 阅读 · 0 评论 -
Linux System Programming --Chapter Three
这一章的主题是--缓冲式I/O一,流与缓冲 流I/O是由C语言的标准函数提供的,这些I/O可以替代系统中提供的read和write函数。事实上流I/O的内部封装了这两个基本的文件读写系统调用。使用流I/O在某些程度上来讲要方便一些,这些I/O在效率上没有特别大的差异。 基于流的操作最终会调用read或者write函数进行操作。为了使程序的运行效率最高,流对象通常会提供缓冲原创 2013-06-13 09:48:33 · 2339 阅读 · 1 评论 -
Linux System Programming --Chapter Two
首先,需要解释的东西是Linux系统调用一、 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。 二、 系统调用的作用 系统调用在Linux系统中发挥着巨大的作原创 2013-06-13 09:45:44 · 2553 阅读 · 1 评论 -
Linux 虚拟内存和物理内存的理解
首先,让我们看下虚拟内存:第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪些地址有数据,哪些地址无数据,原创 2013-06-12 09:48:19 · 29325 阅读 · 9 评论 -
程序(进程)内存分布 解析
在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space),在32位模式下它总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址被使能,那么它就会作用于这台机器上运行的所有软件,包括内核原创 2013-06-12 18:50:02 · 5663 阅读 · 2 评论 -
缓冲区
什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这原创 2013-06-12 09:47:44 · 3306 阅读 · 0 评论 -
Linux 2.6 中的直接 I/O 技术
Linux 2.6 中提供的几种文件访问方式所有的 I/O 操作都是通过读文件或者写文件来完成的。在这里,我们把所有的外围设备,包括键盘和显示器,都看成是文件系统中的文件。访问文件的方法多种多样,这里列出下边这几种 Linux 2.6 中支持的文件访问方式。标准访问文件的方式在 Linux 中,这种访问文件的方式是通过两个系统调用实现的:read() 和 write()。当应用程序调用 read(原创 2013-06-11 12:16:00 · 2204 阅读 · 0 评论 -
Linux 开机启动过程分析
开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程。分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径。启动第一步--加载BIOS当 你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关 信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,原创 2013-06-11 12:08:11 · 4341 阅读 · 0 评论 -
Linux 内存映射函数 mmap()函数详解
一、概述 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间用户空间两者之间需要大量数据传输等操作的话效率是非常高的。以下是一个把普遍文件映射到用户空间的内存区域的示意图。图一:二、基本函数 mmap函数是unix/linux下的系统调用原创 2013-06-12 19:02:12 · 63898 阅读 · 10 评论 -
Linux System Programming --Chapter Eight
内存管理一.分配动态内存的几个函数用户空间内存分配:malloc、calloc、realloc1、malloc原型如下:extern void *malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节块。工作机制:malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满转载 2013-06-18 08:41:08 · 2103 阅读 · 0 评论