博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux探秘之用户态与内核态
阅读量:4097 次
发布时间:2019-05-25

本文共 1074 字,大约阅读时间需要 3 分钟。

一、 Unix/Linux的体系架构

  如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用。

  系统调用是操作系统的最小功能单位,这些系统调用根据不同的应用场景可以进行扩展和裁剪,现在各种版本的Unix实现都提供了不同数量的系统调用,如Linux的不同版本提供了240-260个系统调用,FreeBSD大约提供了320个(reference:UNIX环境高级编程)。我们可以把系统调用看成是一种不能再化简的操作(类似于原子操作,但是不同概念),有人把它比作一个汉字的一个“笔画”,而一个“汉字”就代表一个上层应用,我觉得这个比喻非常贴切。因此,有时候如果要实现一个完整的汉字(给某个变量分配内存空间),就必须调用很多的系统调用。如果从实现者(程序员)的角度来看,这势必会加重程序员的负担,良好的程序设计方法是:重视上层的业务逻辑操作,而尽可能避免底层复杂的实现细节。库函数正是为了将程序员从复杂的细节中解脱出来而提出的一种有效方法。它实现对系统调用的封装,将简单的业务逻辑接口呈现给用户,方便用户调用,从这个角度上看,库函数就像是组成汉字的“偏旁”。这样的一种组成方式极大增强了程序设计的灵活性,对于简单的操作,我们可以直接调用系统调用来访问资源,如“人”,对于复杂操作,我们借助于库函数来实现,如“仁”。显然,这样的库函数依据不同的标准也可以有不同的实现版本,如ISO C 标准库,POSIX标准库等。

  Shell是一个特殊的应用程序,俗称命令行,本质上是一个命令解释器,它下通系统调用,上通各种应用,通常充当着一种“胶水”的角色,来连接各个小功能程序,让不同程序能够以一个清晰的接口协同工作,从而增强各个程序的功能。同时,Shell是可编程的,它可以执行符合Shell语法的文本,这样的文本称为Shell脚本,通常短短的几行Shell脚本就可以实现一个非常大的功能,原因就是这些Shell语句通常都对系统调用做了一层封装。为了方便用户和系统交互,一般,一个Shell对应一个终端,终端是一个硬件设备,呈现给用户的是一个图形化窗口。我们可以通过这个窗口输入或者输出文本。这个文本直接传递给shell进行分析解释,然后执行。

转载地址:http://fwlii.baihongyu.com/

你可能感兴趣的文章
Java虚拟机工具之堆栈跟踪工具jstack检测死锁
查看>>
Java虚拟机工具之堆栈跟踪工具jstack检测输入等待
查看>>
Java虚拟机工具之堆栈跟踪工具jstack检测对象wait方法
查看>>
Windows下Jconsole无法连接到进程
查看>>
设置tomcat启动参数
查看>>
启动Tomcat提示:指定的服务未安装
查看>>
构建一个n×n的unique矩阵
查看>>
JavaScript代码加Alert后代码有效,不加则无效。
查看>>
Intellj Idea 16添加Maven新建模块
查看>>
Server Tomcat v7.0 was unable to start within 45 seconds
查看>>
动态规划之子集和问题
查看>>
com.sun.mirror的jar包
查看>>
计算在已知字符串中所有回文子序列的数目
查看>>
Java 类的热替换 —— 概念、设计与实现
查看>>
构建Java并发模型框架
查看>>
数据结构——树的概述
查看>>
数据结构——二叉树的特性
查看>>
数据结构——二叉树的类型
查看>>
数据结构——握手引理与有趣的树特性
查看>>
数据结构——树的遍历
查看>>