小威
...

  1.阻塞分为: 完全阻塞, 不阻塞, 延时阻塞

  2.管理操作系统的方式: 1. 轮询,2. 中断

  3./dev/tty : 当前终端

  5.harddisk 使用block来管理

     memory  使用page来管理

  6.如果在open一个设备时指定了O_NONBLOCK标志, read/write就不会阻塞,以read为例, 如果设备没有数据到达就返回-1, 同时置errno为EWOULDBLOCK(或者EAGAIN)

  7.fcntl : (对设备寄存器进行读写)   可以使用fcntl函数改变一个已打开的文件的属性, 可以重新设置读, 写, 追加, 非阻塞等标志,而不必重新open文件

      原型 : int fcntl(int  fd, int cmd);

          int fcntl(int fd, int cmd, long arg);

          int fcntl(int fd, int cmd, struct flock *lock);

       作用 : 获取标志, 返回标志, 

          设置标志

          文件加锁

      除了F_GETFL和F_SETFL命令外, 还可以设置文件记录锁,。可以通过fcntl设置都是当前进程如何访问设备或文件的访问控制属性

      扩展 : 只有 0_APPEND, O_NONBLOCK 可以被改变

  8.对于重定向符,,小于默认为 0, 大于 默认为 1, >>  ; 无默认参数

  9(重要). command > /dev/NULL 2 > &1

         2 和 1 同时指向某一个文件, 去除警告。。

  10. ioctl : 用于向设备发控制和配置命令, 

        read/write读写的数据是in-band数据, 是I/O操作的主体,

        ioctl命令传送的是控制信息, 其中的数据是辅助的数据  是Out-of-band数据

      原型 : int ioctl(int d, int request, ...);

          d 是某个设备的文件描述符, request 是ioctl 的命令

  11.memory mapping   映射

      Memory Managemete Unit    物理地址   -- 格式化-- 虚拟地址 -- --进程空间地址

      malloc   mmap2

      mmap    mmap2

  12.mmap : 可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,  对文件的读写可以直接来做而不需要read/write函数

      函数原型 : void *mmap(void *addr, size_t len, int prot, int flag, int filedes, off_t off);

            int munmap(void *addr, size_t len);

      addr : 表示从什么地方映射,一般为 NULL

      len : 映射的长度

      prot : 

        参数有四种取值 : 

                PROT_EXEC : 表示映射的这一段可执行,例如 :映射共享库

                PROT_READ :表示映射的这一段可读

                PROT_WRITE :  表示映射的这一段可写

                PROT_NONE : 表示映射的这一段不可访问

      flag 参数 :

            MAP_SHARED :多个进程对同一个文件的映射是共享的,一个进程对映射的内存做了修改,另一个进程也会看到变化

            MAP_PRIVATE :多个进程对同一个文件的映射不是共享的,一个进程对映射的内存做了修改,另一个进程并不会看到这中变化,也不会真的写到文件中去

 

      英语: block (块)  page(叶)  status(状态)

posted on 2013-09-03 18:26  小威_  阅读(143)  评论(0编辑  收藏  举报