Linux Net I/O

概念

  1. 内核态与用户态
  2. 进程切换
  3. 进程状态-阻塞
  4. 文件描述符、文件句柄
  5. 进程和线程
  6. 阻塞和非阻塞
  7. 同步和异步

内核空间与用户空间

操作系统和应用程序运行都需要内存,操作系统运行使用的内存是不允许应用程序使用的,这部分内存叫做内核内存。操作系统的内心是内核,为了安全,操作系统的内核内存只允许操作系统访问。
32位操作系统的内存寻址空间最大为2^32,也就是4GB,从0x00000000 到 0xFFFFFFFF
其中最高端的1GB地址为内核内存,从0xC0000000到0xFFFFFFFF,供操作系统内核使用。
剩余的3GB为用户内存,从0X00000000到0XBFFFFFFFF,供应用程序的进程使用。

进程切换

1个cpu同一时间只能处理一个进程,操作系统通过调度算法让各个进程轮流使用CPU来让程序看起来像是“并行”。然而在这个过程中就涉及到进程切换的问题,一个进程从执行状态切换到等待状态,一个进程从就绪状态切换到执行状态。
进程切换有以下几件事必须要做:
1. 保存当前进程的工作场景,将当前进程的相关信息,包括该进程所拥有的资源地址,CPU中寄存器信息等,存入当前进程的PCB中。
2. 更新PCB信息,将当前进程的状态更新
3. 从就绪队列载入一个进程,恢复该进程的工作场景
4. 更新新进程的PCB信息

参考
PCB(Process Control Block)
进程切换

进程状态-阻塞

进程在执行过程中,可能由于某些原因不能再执行下去了,这个时候就要让出CPU来做其它事情。
这时候进程的状态就要由运行状态变成阻塞状态。该进程进入系统阻塞队列,等到满足执行条件时,再转到等待就绪队列,等待CPU再次分配时间给它,它才会再次回到运行状态。
所以,进程在阻塞状态是不占用CPU资源的。

文件描述符

文件描述符fd(file discrispter),是Linux、Unix系统中的一个概念,其本质是指向一个打开文件映射的抽象概念,其表现为一个唯一的非负整数,由系统为其分配。
Windows中有个概念:句柄,文件描述符与句柄其实是一个概念,都是为了定位打开的文件在内存中的地址,只不过映射方式不一样。

参考
文件句柄、文件描述符与进程和多线程的那些事

进程和线程

  • 进程是可以申请系统资源的最小单位,系统资源包括CPU时间和内存空间,一个CPU同一个时间只能执行一个进程的任务,其它进程处于非运行状态。
  • 线程是CPU调度的最小单位,一个进程可以有若干个线程来协同完成任务,这些线程共享进程的内存空间
  • 一个进程可以有多个线程同时运行,这些线程共享进程的内存空间,为了协调这些线程之间工作,不同时读写同一个内存块,需要采取线程锁、信号量等机制,防止线程争抢资源产生死锁。
  • 进程是独立运行的,拥有独立的进程空间,堆栈、代码段、寄存器、内存。

参考
进程和线程 :阮一峰的博客,讲的很有意思,图文并茂,浅显易懂。

阻塞和非阻塞

  • 阻塞是指进程在请求数据的时候,不继续往下执行,直到拿到了数据才继续执行后面的过程。
  • 非阻塞是进程执行过程中,发出数据请求后,不等待数据到来,继续往下执行,等数据到来之后再对数据进行处理。

同步和异步

  • 同步是指调用方client向server方发出请求,server收到请求后立即处理请求并返回结果,等待server返回结果之后再继续执行。
  • 异步是指调用方client向server方发出请求,然后继续执行后续步骤。server方处理请求,完成之后通过回调函数等方式通知client方,client再处理。

本文参考
Linux IO模式及 select、poll、epoll详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值