一.进程: 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. 825. Friends Of Appropriate Ages有效的好友请求的数量

    [抄题]: Some people will make friend requests. The list of their ages is given and ages[i] is the age ...

  2. springboot用于web开发

    1.使用SpringBoot:1)创建SpringBoot应用,选中我们需要的模块:2)SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来3)自己编写业务代码 ...

  3. leetcode - 3、Longest Substring Without Repeating Characters

    题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ 题目要求: ...

  4. [C++] Variable storage space

    Variable storage space

  5. Python获取服务器的厂商和型号信息-乾颐堂

    Python获取服务器的厂商和型号信息,在RHEHL6下,需要系统预装python-dmidecode这个包(貌似默认就已经装过了) 脚本内容如下 [root@linuxidc tmp]# cat t ...

  6. C#读取EXCEL到内存

    public class ExcelUtils { private static string strcon = "Server=48.12.1.28;initial catalog=NBS ...

  7. Oracle——视图

    视图是一种虚表. 视图建立在已有表的基础上, 视图依赖的这些表称为基表. 视图向用户提供基表数据的另一种表现形式 对视图数据的修改会影响到基表中的数据 视图的优点 控制数据访问 简化查询 避免重复访问 ...

  8. mybatis :xml文件中传入参数和if标签结合使用时要点

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...

  9. myeclipse快捷键记忆

    提示 Alt+?自动排版 Ctrl+shift+f自动添加引入包 Ctrl+shift+O切换窗口 Ctrl+F6自动添加set get方法 Alt+shift+s r 查看都是哪里调用了该方法 Ct ...

  10. 实践作业4:Web测试实践(小组作业)每日任务记录5

    (一)今日任务更新 本次小组作业均已完成! 本组文件最终pdf文件(文件稍大,请耐心等待加载):https://files.cnblogs.com/files/ruanshuo170204/Web测试 ...