一.进程: 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. CENTOS 配置好SVN服务环境后,其他服务器无法访问 Error: Can't connect to host '192.168.1.103': 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

    CENTOS 配置好SVN服务环境后,其他服务器无法访问   根据 下面的步骤配置好服务后,使用本机可以正常 连接到 SVN 服务, 但是使用局域网的其他服务器访问时出现下面的错误, Error: C ...

  2. ubuntu Qt5 opencv3.4 项目配置

    #------------------------------------------------- # # Project created by QtCreator 2019-03-25T14:14 ...

  3. 用 Markdown 写作(一)——添加文章页内导航

    Markdown 可以用更简化的标记来写文章,基本的语法可以参考Markdown 语法说明 (简体中文版). 我平时很少按照论文的写法去写博客,说来忏愧,因为很少写技术性的文章,最近看到百度百科和很多 ...

  4. HUST软工1506班第2周作业成绩公布

    说明 本次公布的成绩对应的作业为: 第2周个人作业:WordCount编码和测试 如果同学对作业成绩存在异议,在成绩公布的72小时内(截止日期4月26日0点)可以进行申诉,方式如下: 毕博平台的第二周 ...

  5. 爬虫框架scrapy的基本内容

    Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以帮助用户简单快速的部署一个专业的网络爬虫.如果说前面我们写的定制bs4爬虫是”手动挡“,那Scrapy就相当 ...

  6. How to add a date range picker to filter for dates on a GridView for Yii2 - See more at: http://www.2amigos.us/blog/how-to-add-a-date-range-picker-to-filter-for-dates-on-a-gridview-for-yii2#sthash.pf7

    Filtering the data we have on our GridView by dates are sometimes very important. On this article I ...

  7. javascript总结28 :匿名函数

    1 匿名函数 //匿名函数. // (function (){ // console.log(1); // }) 2  匿名函数作用 //1.直接调用 (function (){ console.lo ...

  8. Spring AOP 详解 【转】

      此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没有遇到过与之相关的问题.最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP 来解决.一方面是为了以更加灵活的方式来解决问题,另 ...

  9. WINAPI和APIENTRY是一样的

    今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter); 不解为什么要用WINAPI宏定义,查了后发 ...

  10. 解决svn:E155037错误(另附查看.db文件的工具)

    今天使用svn提交代码的时候出问题了,Error:svn: E155037.....Previous operation has not finished; run 'cleanup' if it w ...