2016年5月24日

摘要: 在前面,我们接触到了很多函数能够实现系统相关的功能,比如解析命令行参数、控制进程以及映射内存等等。实际上,这些函数能够分为两大类: 库函数 ——这些函数就像普通函数一样,参数放置在寄存器或者栈里,运行时就从动态库里加载。 系统调用 ——这类函数的参数被打包传递到内核,由内核执行作业。例如低级I/O操 阅读全文
posted @ 2016-05-24 14:25 Rim99 阅读(1192) 评论(0) 推荐(0) 编辑
摘要: 1 用户与组 每一个Linux用户都对应一个用户ID,或者UID。其对文件的读、写、执行等权限是一定的。也可以设置多个用户名对应同一个UID,那么这些用户就都完全共享权限。 如果有很多用户对某一类文件需要共享相同权限,可以把他们归为一个用户组里。每个组对应一个组ID,又叫GID。用户组里的成员只能是 阅读全文
posted @ 2016-05-24 14:25 Rim99 阅读(277) 评论(0) 推荐(0) 编辑

2016年5月18日

摘要: 在shell终端里不带任何参数,直接运行 命令可以显示正在挂载的文件系统。其中有这么一行 这就是 文件系统。第一个域显示 ,说明这个文件没有和任何硬件设备挂钩。 文件系统实际上是一个通向Linux内核的窗口,看起来像一个能够向内核提供参数、数据结构、统计信息等的文件。 文件系统的内容是随内核运行变化 阅读全文
posted @ 2016-05-18 14:54 Rim99 阅读(1654) 评论(0) 推荐(0) 编辑

2016年5月16日

摘要: Linux系统通过模块化的程序——设备驱动,与硬件设备交互。设备驱动将软硬件交互细节隐藏起来,将其封装成标准化的若干操作。 Linux中,设备驱动集成在系统内核中。设备驱动可以静态的连接到内核上,也可以按需动态加载。设备驱动只和内核交互,用户进程无法直接调用设备驱动。Linux系统将设备转化为文件的 阅读全文
posted @ 2016-05-16 17:56 Rim99 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 第三章“进程”里,父进程向子进程传递消息的方法只有启动子进程的命令行参数和环境变量两条路径;子进程向父进程传递消息只能通过子进程的退出代码。而两个进程同时运行时,也往往有交流的需要。 本章将讨论五种进程间通信(IPC)方法: 1. 内存共享(Shared Memory)允许进程通过向共享的内存区域读 阅读全文
posted @ 2016-05-16 10:39 Rim99 阅读(412) 评论(0) 推荐(0) 编辑

2016年5月14日

摘要: Linux使用标准的POSIX API——pthread来管理线程。所有pthread的函数与数据结构都声明在 lpthread`选项。 1 线程的创建 进程中,每一个线程都一个线程ID。在C语言中,线程ID的类型是 。 创建出的线程只执行“线程函数”——一个包含了线程应该执行的代码的普通函数。函数 阅读全文
posted @ 2016-05-14 15:47 Rim99 阅读(267) 评论(0) 推荐(0) 编辑

2016年5月9日

摘要: 程序的运行着的实例叫做进程。Unix中,大多数有关进程管理的函数都声明在``头文件中。 1 进程初步 进程ID Linux中每一个进程都一个独立的ID标识,即pid。进程ID随着进程产生时由系统分配,是一个16位的数字。Linux中,出了特殊的init进程外,每一个进程都有一个父进程。父进程ID叫做 阅读全文
posted @ 2016-05-09 16:41 Rim99 阅读(297) 评论(0) 推荐(0) 编辑

2016年5月5日

摘要: 提供了本书电子版的免费下载。 1 与执行环境交互 关于参数 C语言程序的main()函数使用两个参数和执行环境交互—— 和`(char )argv[] (char )argv[]`的第一个元素为程序本身的位置,其后为程序的参数。 看例子: shell $ program out_put.file 2 阅读全文
posted @ 2016-05-05 17:01 Rim99 阅读(362) 评论(0) 推荐(0) 编辑

2016年5月4日

摘要: 本文摘自CSAPP第12章,并加入了网上的参考资料。 并发与并行 拿线程来举例。 并发 当有多个线程在执行时,系统如果只有一个CPU,则根本不可能真正同时进行一个以上的线程。它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行。在一个时间段的线程代码运行时,其它线程处于挂起状。这种 阅读全文
posted @ 2016-05-04 11:42 Rim99 阅读(188) 评论(0) 推荐(0) 编辑

2016年4月9日

摘要: 本文为CSAPP第五章学习笔记。 编写高效的程序需要: 1. 选择合适的数据结构和算法 2. 编写出编译器能够有效优化以转换成高效可执行代码的源代码 3. 对于计算量较大的任务,可以将其分解为若干小的代码段,然后并行计算 优化代码: 1. 减少不必要的内容,让代码尽可能简单的执行期望的工作。如消除不 阅读全文
posted @ 2016-04-09 20:54 Rim99 阅读(478) 评论(0) 推荐(0) 编辑

导航