linux系统编程之主要概念

本文介绍了Linux操作系统中文件和进程的基础概念,包括文件系统结构、文件类型、进程资源请求方式及进程间的通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统调用:为了从操作系统获得服务或者资源而从用户空间向内核(系统核心)发起的函数调用

系统级别影响可移植性的因素主要包含两个相互独立的定义和描述集合,一个是应用程序接口API,另一个是应用程序二进制接口ABI

linux尽量和两个最广泛使用的标准保持兼容:POSIX和Single Unix Specification(现在已合并最新POSIX标准)

linux提供SUSv3和POSIX.1描述的接口,gccC编译器支持ISO C99,并提供很多C语言的扩展GNU C

 

一切皆是文件(读取和写入文件)。普通文件包含以线性字节数组方式组织的数据,称为字节流。文件的大小和文件位置的最大值受存储该值的C语言类型的大小限制

文件操作:需要考虑多进程。进程能够共享文件描述符,从而允许同一描述符被多个进程使用。内核没有对并发文件访问强加任何限制,不同的进程能够同时对同一个文件进行读写

文件inode:文件通过inode信息节点访问。一个inode存储文件关联的元数据,如修改时间戳、所有者、类型、长度及文件数据的地址。inode既是unix文件系统在磁盘上实际物理对象,也是linux内核数据结构的概念实体

目录:用来提供访问文件所需的名字,文件名和inode编号进行映射。目录可以视为任何普通的文件,唯一的不同点是它仅仅存储名字和inode的映射。目录或者路径解析,内核使用缓存存储目录解析的结构,加快查询速度

提问:linux目录和文件的区别有哪些??存储内容、操作

链接:不同的名字映射到同一个inode信息节点的多个链接称为硬链接。inode包含一个链接计数跟踪文件系统中指向文件的硬链接数目

特殊文件:linux支持四种类型的特殊文件:块设备文件、字符设备文件、命名管道和unix域套接字。字符设备以字节线性队列方式(先进先出)进行访问,如键盘。块设备以字节数组的方式进行访问,如存储设备、硬盘、软盘等。命名管道和普通管道都是通过FIFO特殊文件进行访问,不相关进程可以访问文件进行交互

文件系统的根目录可以通过挂载点访问,如挂载CD到/media/cdrom。文件系统一般存在于物理介质,linux支持存储在内存上的虚拟文件系统和跨网络的网络文件系统。块设备最小访问地址单元为扇区,扇区是设备的物理单位。文件系统最小的逻辑地址单元是块。块是文件系统中的抽象,通常是2的指数倍与扇区大小的乘积。块一般大于扇区大小,必须小于页的大小(最小可访问的内存管理单元)

 

进程:进程是执行中目标代码:活动的、生存的、运行的程序。段是加载到线性内存块的线性目标代码块。最重要和通用的端为代码段、数据段和bss段。代码段包含可执行代码和只读数据;数据段包含已初始化的数据;bss段包含未初始化的全局数据(映射0页面)

进程典型的资源请求和操作只能通过系统调用。资源包括计时器、挂起信号量、打开文件、网络连接、硬件和进程通信。一个进程的资源,进程相关的数据和统计信息都存储在内核该进程的进程描述符中。

通过虚拟内存和分页调度,内核允许多个进程共存系统,每个进程操作都有自己的地址空间。内核通过现代处理器的硬件支持管理虚拟化。(如何实现多个进程地址空间的独立??

线程:一个进程包含一个或多个执行线程,线程是进程中的活动单位。线程是一种抽象,负责执行代码和维护进程的运行状态。线程包括栈(用于存储局部变量)、处理器状态、目标代码的当前位置(处理器的指令指针),进程其它部分由所有线程共享。linux在用户空间根据POSIX1003.1c实现线程。目前linux线程实现的名称为Native POSIX Threading Library(NPTL)是glibc库的一部分

进程体系:如果父进程先于子进程终止,内核将init进程指定为它的父进程。如果进程终止,并不会立即从系统移除。内核在内存中保存进程的部分内容,允许父进程查询进程终止的状态,称为终止进程等待。如果一个进程终止,父进程无法获知它的状态,成为僵尸进程

用户和组:每个进程与一个用户ID关联,用来识别运行进程的用户,成为real uid。real uid是启动进程的用户;effective uid可以使进程在其它用户的权限下运行;saved uid保存原来的effecitve uid,决定用户切换到哪个efffective uid

权限:每个文件都有一个所有者(ower)、所属组(group)及权限位集(everyone),用于描述文件的读、写和执行权限。文件所有者和权限信息存储在文件的inode

信号:一种单向异步通知机制,可能从内核到进程,可能从进程到进程,或者进程给自己。每个信号由一个数字常量和文本名表示。进程可以使用默认的信号处理,可以使用用户编写的信号处理函数

进程间通讯:linux支持的IPC包括管道、命名管道、信号量、消息队列、共享内存和用户空间互斥体

perror、strerror函数是线程不安全的;strerror_r函数是线程安全的,错误时设置errno。单线程程序,errno是全局变量;多线程程序,errno是线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值