高级IO中的一些重要的概念(fcntl、dup、dup2)

高级IO相关的概念

1.用户空间&内核空间

现在的操作系统都是采用虚存储器,对于32位的存储器而言,虚拟存储空间为4G(2^32)。操作系统的核心是内核,独立于普通应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。

为了保证用户进程不能直接操作内核,保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,另一部分为用户空间。

对于Linux而言,将最高的1G字节(0XC0000000~0XFFFFFFFF),给内核使用,称为内核空间,而将较低的3G字节,供客户使用,称为用户空间。

2.进程切换

为了控制进程,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为称作进程切换。所以,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。
从一个进程的运行转到另一个进程运行,需要经过几件事情:

* 保存处理机上下文,包括程序计数器和其他寄存器。
* 更新PCB的信息。
* 把进程的PCB移入相应的队列,如就绪队列。选择另一个进程执行,并更新其PCB。
* 更新内存管理的数据结构。
* 恢复处理机的上下文。

3.进程阻塞

正在执行的进程,由于期待的某些事件未发生,如请求资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语,使自己由运行状态变为阻塞状态。

因此,进程阻塞是一种主动行为,只有处于运行状态(占用CPU)的进程,才能将其转换为阻塞状态,当进程进入阻塞状态,不占用CPU资源。

4.缓存IO

缓存IO被称作为标准IO,大多数文件系统的默认IO操作都是缓存IO。在Linux缓存IO机制中,操作系统会将IO的数据存在文件系统的页缓存。即数据会先被拷贝到操作系统内核的缓存区中,然后才会从操作系统内核的缓冲区拷贝到应用进程的地址空间。

缓存IO也是有缺点的,数据在传输过程中需要在应用程序地址空间和内核进行多次数据拷贝的操作,这些数据拷贝操作所带来的CPU以及内存开销是非常大的。

5.同步&异步与阻塞&非阻塞

同步和异步关注的是消息通信机制
同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回,但是一旦调用返回,就得到返回值。即调用者主动等待这个调用的结果。

异步,就是调用在发出之后,这个调用就直接返回了,没有返回结果。即当一个异步过程调用发出后,调用者不会立即得到结果,而在调用发出后,被调用者通过状态、通知来通知调用者,或者通过回调函数处理这个调用。

阻塞和非阻塞关注的是程序在等待调用结果时的状态
阻塞调用的是指结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。
非阻塞调用是指在不能立刻得到结果之前,该调用不会阻挡当前进程。

举个简单的例子。老张在烧开水。

情景一

老张把水壶放在火上,站在跟前等着水开。

情景二

老张把水壶放在火上,然后去客厅看电视,并不断的去厨房查看水是否开了。

情景三

老张买了一个响水壶,站在跟前等待壶响,水开。

情景四

老张把响水壶放在火上,去客厅看电视,水壶响之前不看它,直到听到响了才去拿壶。

情景一是同步阻塞,情景二是同步非阻塞,情景三是异步阻塞,情景四是异步非阻塞。

同步与异步就好比是普通水壶与响水壶,同步(普通水壶),异步(响水壶)。虽然都可以烧水,但是响水壶可以在自己完工之后,提示老张水开了。同步只能让调用者去轮询,效率降低。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值