操作系统内核--进程猜想

今天看unix网络编程的时候,看到调用send函数,把数据放入缓冲区,然后加上ip层包头,然后放入链路层输入队列,链路层进程从输入队列取出,然后发送。

一下子就蒙住了,以前对操作系统内核没想到去怎么形容,比如我用户进程里调用阻塞时send方法,有数据后才会返回。以为自己对这句话理解了。

 

现在想想不知其所以然也。以下是自己查了一些资料,加上一些猜测的操作系统内核的进程方面的架构。

没有操作系统前,人们也可以利用cpu来做事情。操作系统就是一个系统,这个系统包含一些进程,线程,对cpu封装,我们写的所有应用程序都是在操作系统之上进行的。

也就是操作系统内核进程有好多个,是主动对象。

这样的话,用户进程调用send,内部调用系统调用,假设这个系统调用把一个请求放到一个消息队列中,有一个进程一直在监控这个消息队列,有数据了就读出来去处理。

用户进程调用send后,就把本进程挂起;然后通过某种通信方式,让内核进程执行,这里是内核进程从内核缓冲区中取出数据,然后wakeup用户进程。

 

所以网络编程中所谓的send和recv都是从内核缓冲中读写的,内核的网络模块不管你用户进程是否有在recv,只要网络对端有数据来,都会接收到缓冲区。如果用户进程send,则内核进程a就把数据放入缓冲区,然后让用户进程返回。内核进程b从缓冲区中发送。

 

百度 内核进程 用户进程

init进程

http://blogimg.chinaunix.net/blog/upfile2/080802120641.pdf

 

 

网卡驱动程序:

提供发送数据接口。

有数据的时候,网卡产生一个中断,然后由中断处理程序接收数据到缓冲。

http://hi.baidu.com/shuaihujun/blog/item/61ce883c49737b06baa167a4.html

 

综上,内核里的主动对象是通过进程;而驱动程序的主动对象时通过硬件中断。

在操作系统之下开发应用程序,好像很少会考虑怎么去实现主动对象,进程是怎么实现的,像网卡接收数据,可以通过中断,硬件本身也是主动对象。

脑子乱了。

linux内核和驱动,啥时候研究下就好了。minux是linux的前驱,更简单。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值