【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

2024-06-24 14:12

本文主要是介绍【Linux进阶】UNIX体系结构分解——操作系统,内核,shell,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.什么是操作系统?

从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。
我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。 

从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等。

2.UNIX体系结构

下图显示了UNIX系统的体系结构

  1. 内核的接口被称为系统调用(system call,图1-1中的阴影部分)。
  2. 公用函数库构建在系统调用接口之上,应用程序既可使用公用函数库,也可使用系统调用。
  3. shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口。

例如,Linux是GNU操作系统使用的内核。一些人将这种操作系统称为GNU/Linux操作系但是,更常见的是简单地称其为Linux。虽然这种表达方法在严格意义上讲并不正确,但鉴“操作系统”这个词的双重含义,这种叫法还是可以理解的(这样的叫法更简洁)。

系统调用我们之前讲过,这个公用函数库我们也讲过,那么我们只需要来了解一下内核和shell

3. 什么是内核(Kernel)

内核是操作系统的核心内核是操作系统执行的第一道程序,被率先加载到内存中开始系统行为。内核始终保持在主内存中直到系统被关闭。内核将用户输入的命令转换成计算机硬件能理解的机器语言。

内核是系统应用软件和硬件的桥梁。内核直接与硬件联系,并告之它由应用软件发起的请求。操作系统不能脱离内核工作,内核是系统正常运行最重要的程序。

内核的主要职责是:进程管理、磁盘管理、任务调度、内存管理等,具体如下:

  • 文件管理

为了更有效地搜索和使用文件,内核使用文件系统(file system)来组织文件,并通过文件系统保持对文件数据存储、文件状态、访问设置的监视。

  • 进程管理

在多进程环境下,内核决定哪一道进程被CPU优先运行,以及分配的运行时间片长度是多少,称为进程调度。当进程不再被需要的时候,将被内核自动销毁。

  • 内存管理

内核检测内存空间——生成或销毁内存,以确保应用程序被正确执行。

内核分为单核(Monolithic Kernel)和微核(Microkernel)两种。

  • 对于单核,所有操作系统服务运行在单核的主线程中,单核提供了对系统硬件的广泛访问。
  • 对于微核,其提供的是硬件抽象,意味着操作系统必须在系统调用(system calls)和原语(primitives)的帮助下工作。

3.1.操作系统和内核的区别

4.什么是shell

我们把上面那个图拿下来

shell是操作系统的最外层是一个用户跟操作系统之间交互的命令解释器,也就是运行在终端中的文本互动程序。

Shell相当于是一个翻译,把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前。

 shell独立于内核,是链接内核和应用程序的桥梁,通俗来讲shell是内核周围的外壳

UNIX中常见的shell
名称路径FreeBSD 8.0Linux 3.2.0Mac OS X 10.6.8Solaris 10
Bourne shell/bin/shbash的副本
Bourne-again shell/bin/bash可选的
C shell/bin/csh链接至tcsh可选的链接至tcsh
Korn shell/bin/ksh可选的可选的
TENEX Cshell/bin/tcsh可选的

系统从口令文件中相应用户登录项的最后一个字段中了解到应该为该登录用户执行那
个 shell。

4.1.shell的作用

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。

如何理解?为什么不能直接使用kernel?

我们所有的指令,最终都要在OS内部运行,但是直接使用OS难度非常高,我们用户不能直接和操作系统打交道,我们只能通过命令行来进行交互,和OS沟通的之间的桥梁就是命令行解释器 

shell是用户和Linux(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。

 

 shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。

不论何时你键入一个命令,它都被Linux shell所解释。

一些命令,比如打印当前工作目录命令(pwd),是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,比如拷贝命令(cp)和移动命令(rm),是存在于文件系统中某个目录下的单独的程序。

而对用户来说,你不知道(或者可能不关心)一个命令是建立在shell内部还是一个单独的程序。

        shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如ls rm,然后shell试着在搜索路径($PATH)里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。

总的来说就是下面这个意思

指令——>命令行解释器——>os  

命令行解释器存在的意义:

  • 进行命令行解释
  • 保护OS,对于用户的非法请求,直接拦截 

4.2.shell的历史

自V7以来,由Steve Bourne 在贝尔实验室开发的Bourne shell得到了广泛应用,几乎每一个
现有的UNIX系统都提供Bourne shell,其控制流结构类似于Algol68。

C shell 是由 Bill Joy 在伯克利开发的,所有 BSD版本都提供这种shell。另外,AT&T的System V/386 R3.2和 System V R4(SVR4)也提供Cshell。C shell 是在第6版shell 而非 Bourme shell 的基础上构造的,其控制流类似于C语言,它支持Bourne shell 没有的一些特色功能,例如作业控制、历史机制以及命令行编辑等。

Korn shell 是Bourne shell的后继者,它首先在SVR4中提供。Korn shell是由贝尔实验室的David Korn开发的,在大多数UNIX系统上运行,但在SVR4之前,通常它需要另行购买,所以没有其他两种shell流行。它与Bourne shell向上兼容,并具有使Cshell广泛得到应用的一些特色功能,包括作业控制以及命令行编辑等。

Bourne-again shell 是GNU shell,所有Linux 系统都提供这种shell。它的设计遵循 POSIX标准,同时也保留了与Bourne shell 的兼容性。它支持C shell 和 Korn shell 两者的特色功能。

TENEX C shell 是C shell的加强版本。它从TENEX操作系统(1972年BBN公司开发)借
鉴了很多特色,例如命令完备。TENEXC shell在Cshell基础上增加了很多特性,常被用来替换Cshell。

POSIX 1003.2标准对shell进行了标准化。这项规范基于Korn shell和Bourne shell的特性。

不同的Linux系统使用不同的默认shell。

  • 一些Linux默认使用Bourmne-again shell。
  • 另外一些使用BSD的对Boumne shell的替代品dash(Debian Almquist shell,最早由Kenneth Almquist开发,并在后来移植入Linux )。
  • FreeBSD的默认用户shell 衍生于 Almquist shell。
  • Mac OSX的默认 shell是Boume-again shell。

Solaries 继承了BSD和System V两者,它提供了上图中所示的所有shell。在因特网上可以找到shell的自由移植版软件。

4.3.什么是shell脚本 

      shell脚本是shell命令组成的文件

换一种说法,shell脚本是利用shell的功能所写的一个程序,这个程序使用纯文本文件将一些shell语法和指令写在里面,让使用者很容易的就能够一个操作执行多个命令。

4.4.bash

最开始在Unix系统中流行的是sh,而bash作为sh的改进版本,提供了更加丰富的功能。

而bash的全名是Bourne Again Shell。

bash(GNU Bourne-Again Shell)是最常用的一种shell,是当前大多数Linux发行版的默认Shell。

Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的扩展。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell 里的优点。bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。

为什么要用 bash 来代替 sh 呢?

Bourne shell 最大的缺点在于它处理用户的输入方面。在 Bourne shell 里键入命令会很麻烦,尤其当你键入很多相似的命令时。而 bash 准备了几种特性使命令的输入变得更容易。 

这篇关于【Linux进阶】UNIX体系结构分解——操作系统,内核,shell的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1090375

相关文章

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%