一.进程: fork,exec,waitpid

  1.子进程:复制进程的代码与堆栈状态,因此子进程将会从刚执行的指令fork位置继续往下执行。

  2.父进程通过waitpid等待子进程完成

二.线程:

  1.控制线程:执行指令的线程,多个控制线程可以同一时刻执行指令。

  2.线程共享:地址空间,文件描述符,栈,其他(共享数据即非线程函数堆栈内部数据需要同步)

三.unix函数:

  1.出错返回负值。

四:

  1.文件描述符:

    不同文件表描述可以对应同一文件表项

    文件描述符是进程相关资源,每个进程都有自己独立的一组文件描述符,例如进程A的文件描述符1和进程B的文件描述符1就没有什么关系,你不可能说是进程A给进程B传个1,进程B就开始使用进程A的文件描述符1了。

  2.文件表项:

    是系统管理维护管理的表,记录了操作文件的偏移,以及文件状态(读,写,异步,同步)。不同文件表项可以指向同个v节点

  3.v节点:

    一些文件操作的函数。

  4.i节点:

    索引信息,从磁盘读文件时候载入的。

  5.参考:http://blog.chinaunix.net/uid-26548237-id-3046664.html

五:

  1.unix系统调用是原子的吗?

   系统调用有的是原子的,有的不是, 有的是有条件的原子的。比如write就不是原子的。但你write管道,在某个尺寸大小的数据下,就是原子的。

六:IO

  1.文件的read,write等系统调用,在用户级别没有缓存,在系统级别有缓存,也就是说当调用read或者write的时候,可能是系统缓存中的脏数据。

    参考:

        http://bbs.chinaunix.net/thread-4089435-1-1.html

        http://www.cnblogs.com/hanyan225/archive/2011/08/05/2126619.html

  2.一般unix系统上的标准IO库函数都带有缓存的,是用户级的。

  3.锁:

    

    a.强制锁和建议锁:

      强制锁,是OS内核的文件锁。每个对文件操作时,例如执行open、read、write等操作时,OS内部检测该文件是否被加了强制锁,如果加锁导致这些文件操作失败。也就是内核强制应用程序来遵守游戏规则;

      建议锁又称协同锁。对于这种类型的锁,内核只是提供加减锁以及检测是否加锁的操作,但是不提供锁的控制与协调工作。也就是说,如果应用程序对某个文件进行 操作时,没有检测是否加锁或者无视加锁而直接向文件写入数据,内核是不会加以阻拦控制的。因此,建议锁,不能阻止进程对文件的操作,而只能依赖于大家自觉 的去检测是否加锁然后约束自己的行为;(一般应用于数据库)

      linux是有强制锁的,但是默认不开启.想让linux支持强制性锁,不但在mount的时候需要加上-o mand,而且对要加锁的文件也需要设置相关权限。

    b.进程,文件,锁:

      锁的目标是文件中的字节段

      同一个进程如果对同文件的同区段进行多次加锁,则最后一次锁取代前面的锁。比如首先加了写锁,然后又加了读锁。现在该进程上的就是读锁。

      进程关闭,则其上所有锁的关闭

      进程中文件描述符关闭,则文件描述符所对应的文件的在进程里面所有锁都关闭。例如,某个进程中有两个文件描述符A和B,指向同个文件,B关闭了。则基于A和B申请的锁都关闭。

   4.异步io:

    a.linux的异步io是事件通知,windows的异步io是完成通知(也就是说io执行由windows内核执行的);

    b.select,poll,epoll(epoll比起前面两种更加快,原因?事件通知时候只需要少量数据),

    c.详情参考:http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html

     

      

unix高级编程阅读的更多相关文章

  1. 看unix高级编程时遇到apue.h找不到的问题

    最近学习 Unix 环境高级编程这本书,第一个例子就碰到了问题,下面是解决办法. 一开始看到这本书,刚翻了几页,就觉得对味.按照书中的代码做练习时,编译代码文件提示fatal error: apue. ...

  2. Unix高级编程Note3

    [Unix高级编程Note3] 1.RECURSIVE锁可以递归,普通锁只会死锁 2.线程安全函数 3.线程私有数据 4.pthread_once 5.线程取消点 6.线程信号 7.pread 8.d ...

  3. 使用APUE(UNIX高级编程)源代码

    方法一:1.APUE源代码下载:http://www.apuebook.com/code3e.html2.我保存到了/root下.解压缩:tar -xzvf src.tar.gz3.cd apue.2 ...

  4. Unix高级编程Note2

    [Unix Note2] 1.信号屏蔽 2.信号不会排队,即产生同时产生10次,会被合并为1次. 3.sigsuspend,sigsuspend后,进程就挂在那里,等待着开放的信号的唤醒.系统在接收到 ...

  5. Unix高级编程Note1

    [Unix Notes] 1./etc/passwd 2.extern int errno; 3.限制, limit.h 4.文件原子操作:O_EXCL & O_CREAT 5.stat操作 ...

  6. Unix高级编程之文件权限

    1.访问权限表 st_mode 意义 S_IRUSR 用户-读 S_IWUSR 用户-写 S_IXUSR 用户-执行 S_IRGRP 组-读 S_IWGRP 组-写 S_IXGRP 组-执行 S_IR ...

  7. 【转】apue《UNIX环境高级编程第三版》第一章答案详解

    原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此 ...

  8. 《UNIX环境高级编程》源码配置——apue.3e 安装

    转载从:http://blog.csdn.net/songshimvp1/article/details/51440545 网上大都是针对UNIX高级编程第二版的头文件搭建,现在对于第三版来说有些过时 ...

  9. UNIX高级环境编程1

    UNIX高级环境编程1 故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详. 首先,了解一下进程的基本概念,进程在内存中布局和内容. 此外,还需要知道运行时是如何为动态数据结构(如链表 ...

随机推荐

  1. 91. Decode Ways反编译字符串

    [抄题]: A message containing letters from A-Z is being encoded to numbers using the following mapping: ...

  2. xdebug 一直报错 upstream timed out (110: Connection timed out) while reading response header from upstream

    本地主机(Windows环境192.168.66.1)访问虚拟机(192.168.66.139)里面的搭建的php环境(系统centos6.5版本,php版本是5.5.30 ,xdebug 2.4.0 ...

  3. C#HTML解析利器HtmlAgilityPack

    HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手.目前 ...

  4. Python爬虫实战五之模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...

  5. SVM之SMO算法(转)

    支持向量机(Support Vector Machine)-----SVM之SMO算法(转) 此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimizat ...

  6. java中Integer常量池

    我们先看一个关于Integer的例子 public static void main(String[] args) { // TeODO Auto-generated method stu Integ ...

  7. 在 CentOS 上部署 Nginx 环境

    这里的案例主要通过虚拟机( vmware workstation (14) )的方式安装 Center OS 到本地环境 资源下载:  vmware workstation   / CentOS 本次 ...

  8. 如何解决Android开发中的【java.lang.unsatisfiedlinkerror findLibrary returned null.】 错误

    将脉可寻的功能加入到自己的APP中时,需要在libs文件中添加.so文件和jar包 但是,加入.so文件后,仍然报错 在一番折腾之后,终于解决了,然而解决的方法很奇异- -. 在libs下新建一个ar ...

  9. Python之set集合与collections系列

    1>set集合:是一个无序且不重复的元素集合:访问速度快,解决了重复的问题: s2 = set(["che","liu","haha" ...

  10. opencv——pcb上找圆mark点(模板匹配)

    #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <cxcore.h ...