操作系统学习笔记(一):常见名词的理解:内核、文件描述符、套接字

一、用户态和内核态

这两种其实时操作系统运行的两种状态,操作系统的某些指令的执行可能会导致整个系统的崩溃,所以把这些指令封装到内核里,用户自己没有权限执行这些指令而是转而让操作系统去执行,用户可以用通过系统调用,使CPU从用户态转为内核态,完成相应文件读写之类的任务。
例如当我们的应用程序需要从磁盘读取某个文件的数据,数据要经过内核

  1. 数据从磁盘复制到内核Buffer
  2. 在从内核Buffer复制到用户Buffer

二、文件描述符

在linux系统里一切都可以看作是文件,包括普通文件、目录文件,字符设备文件(鼠标键盘),块设备文件(硬盘,光驱),套接字等等,所有一切都抽象成文件,提供统一的接口方便程序调用。

如何把程序对应上已经打开的文件呢?就使用文件描述符(file descripe 简称fd)。
首先文件描述符有几个特性:

  • 非负整数
  • 递增

当应用程序请求内核打开/新建一个文件时,内核会返回一个fd用于对应这个打开/新建的文件,读写文件也是需要使用这个fd来指定待读写的文件。

  • 网络接口select、poll、epoll涉及到文件描述符
  • I/O接口read、write也涉及到文件描述符

其实在编程时函数返回的fd就是一个整数,如果深入一下,看看内核的代码,可以了解,其实fd就是一个装有文件的数组的下标~
可以通过下图进行理解:
摘自:https://www.cnblogs.com/DengGao/p/file_symbol.html
摘选自:https://www.cnblogs.com/DengGao/p/file_symbol.html

三、套接字

套接字(socket):可以理解为通信的通信的一个端点,每个套接字都是由一个IP地址和一个端口号组成。通过网络通信的每对进程都是需要使用一对套接字,就是每个进程各有一个。

通常,套接字采用客户机-服务器架构。服务器通过监听指定端口,来等待客户请求。服务器在收到请求后,接受来自客户套接字的连接,从而完成连接。而且这个连接是唯一的。
在这里插入图片描述
摘自:http://c.biancheng.net/view/1210.html
使用套接字的通信,虽然常用有效,但是属于分布式进程间的一种低级通信。原因是套接字只允许在通信进程之间交换无结构的字节流。客户机或者服务器程序需要自己加上数据结构

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值