一.进程: 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. Python原始套接字编程-乾颐堂

    在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_R ...

  2. C# chart.DataManipulator.FinancialFormula()公式的使用 线性回归预测方法

    最近翻阅资料,找到 chart.DataManipulator.FinancialFormula()公式的使用,打开另一扇未曾了解的窗,供大家分享一下. 一 DataManipulator类 运行时, ...

  3. ettercap 命令

    本地主机:192.168.0.149 目标主机:192.168.0.138 /etc/ettercap/etter.dns,将dns欺骗到本机 ettercap -T -q -i wlan0 -P d ...

  4. 编写高质量代码改善C#程序的157个建议——建议76: 警惕线程的优先级

    建议76: 警惕线程的优先级 线程在C#中有5个优先级:Highest.AboveNormal.Normal.BelowNormal和Lowest.讲到线程的优先级,就会涉及线程的调度.Windows ...

  5. cocos2dx conversion to dalvik format failed

    标题的这个问题不知道有没有朋友遇到过,我就被害惨了一个晚上加一个早上的时间了. 可能其他朋友很多搜conversion to dalvik format failed 都会看到一样的答案,我是针对做c ...

  6. Crystal Reports for Visual Studio 2015 安装

    如果你在vs2015下要用到Cystal Reports,请安装下面的插件.安装时请退出vs2015,安装后重启. https://www.aspsnippets.com/Articles/Downl ...

  7. Linux 部署.Net Core 项目

    前面也有说到,我学习Linux 主要因为要学习一下部署.NET CORE项目到Linux 系统,这里就记录一下部署的详细步骤吧. 主要需要安装以下几个工具 1..NET CORE SDK 2.Jexu ...

  8. C# redis 的简单应用

    region 准备参数 var connStr = "localhost:6379,password="; var db = 2; SiteRedisHelper redisHel ...

  9. Spring Boot - 记录日志

    比自己写文本日志的好处 默认定义好了一些日志级别,会记录当前使用的级别以上的日志,通常线上环境设置的级别较高记得较少 有一些自动split之类的功能 Commons-logging 日志级别:TRAC ...

  10. Windows上编译OpenImageIO

    这里使用的是OpenImageIO 1.1.11,要将OIIO解压到[工作目录]/openimageio/oiio里面. 先要给OIIO打一个patch,patch文件是Blender提供的: 下载O ...