我以下图为基础,说明Linux的架构(architecture)。(该图参考《Advanced Programming in Unix Environment》)

最内层是硬件,最外层是用户常用的应用,比如说firefox浏览器,evolution查看邮件,一个计算流体模型等等。硬件是物质基础,而应用提供服务。但在两者之间,还要经过一番周折。

还记得Linux启动。Linux首先启动内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。

为了方便调用内核,Linux将内核的功能接口制作成系统调用(system call)。系统调用看起来就像C语言的函数。你可以在程序中直接调用。Linux系统有两百多个这样的系统调用。用户不需要了解内核的复杂结构,就可以使用内核。系统调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。一个系统调用函数就像是汉字的一个笔画。任何一个汉字都要由基本的笔画(点、横、撇等等)构成。我不能臆造笔画。

在命令行中输入$man 2 syscalls可以查看所有的系统调用。你也可以通过$man 2 read来查看系统调用read()的说明。在这两个命令中的2都表示我们要在2类(系统调用类)中查询 (具体各个类是什么可以通过$man man看到)。

系统调用提供的功能非常基础,所以使用起来很麻烦。一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能。上面的分配内存的操作,可以定义成一个库函数(像malloc()这样的函数)。再比如说,在读取文件的时候,系统调用要求我们设置好所需要的缓冲。我可以使用Standard IO库中的读取函数。这个读取函数既负责设置缓冲,又负责使用读取的系统调用函数。使用库函数对于机器来说并没有效率上的优势,但可以把程序员从细节中解救出来。库函数就像是汉字的偏旁部首,它由笔画组成,但使用偏旁部首更容易组成字,比如"铁"。当然,你也完全可以不使用库函数,而直接调用系统函数,就像“人”字一样,不用偏旁部首。

(实际上,一个操作系统要称得上是UNIX系统,必须要拥有一些库函数,比如ISO C标准库,POSIX标准等。)

shell是一个特殊的应用。很多用户将它称为命令行 。shell是一个命令解释器(interpreter),当我们输入“ls -l”的时候,它将此字符串解释为

1.在默认路径找到该文件(/bin/ls),
2.执行该文件,并附带参数"-l"。

我之前用>表示重新定向,用|表示管道 ,也是通过shell解释&或者|的含义。Shell接着通过系统调,用指挥内核,实现具体的重定向或者管道。在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用时,通过shell输入命令,来运行程序。shell是可编程的,它可以执行符合shell语法的文本。这样的文本叫做shell脚本(script)。可以在架构图中看到,shell下通系统调用,上通各种应用,同时还有许多自身的小工具可以使用。Shell脚本可以在寥寥数行中,实现复杂的功能。

UNIX的一条哲学是让每个程序尽量独立的做好一个小的功能。而shell充当了这些小功能之间的"胶水",让不同程序能够以一个清晰的接口(文本流)协同工作,从而增强各个程序的功能。这也是Linux老鸟鼓励新手多用shell,少用图形化界面的原因之一。

(shell也有很多种,最常见的是bash, 另外还有sh, csh, tcsh, ksh。它们出现的年代不同,所支持的功能也有差异。)

一个使用bash shell的终端

一个shell对应一个终端 (terminal)。曾经来说,终端是一个硬件设备,用来输入并显示输出。如今,由于图形化界面的普及,终端往往就像上图一样,是一个图形化的窗口。你可以通过这个窗口输入或者输出文本。这个文本直接传递给shell进行分析解释,然后执行。

最后,我们进入一般的应用。应用是一个程序,它可以

1.直接调用系统函数
2.调用库函数
3.运行shell脚本

这些应用可以由多种语言开发。最常见的是C语言。

总结

Linux利用内核实现软硬件的对话。

通过系统调用的这个接口,Linux将上层的应用与下层的内核分离,隐藏了底层的复杂性,也提高了上层应用的可移植性。

库函数利用系统调用创造出模块化的功能,

Shell则提供了一个用户界面,并让我们可以利用shell的语法编写脚本,以整合程序。

shell是一个应用程序,用户通过指令回车生产一个shell应用程序来操作指令

Linux系统的系统架构相关推荐

  1. 删除Kali Linux多余的系统架构

    删除Kali Linux多余的系统架构 现在大家通常安装的都是Kali Linux 64位操作系统,其架构为amd64.如果要安装运行32位的程序(如wine32),则必须添加32位架构i386.添加 ...

  2. linux的系统架构,(转载)图解Linux系统的系统架构

    我以下图为基础,说明Linux的架构(architecture).(该图参考<Advanced Programming in Unix Environment>) 最内层是硬件,最外层是用 ...

  3. Linux系统进程调度——调度架构详细分析

    日期 内核版本 架构 作者 内容 2019-4-14 Linux-2.6.32 X86 Bystander Linux进程调度架构 1 调度器 1.1 概述 现代的操作系统是多任务的操作系统,硬件的处 ...

  4. 谷歌安卓系统可兼容linux,与安卓系统兼容的架构 - 车载安卓系统的设计方案和注意事项...

    与安卓系统兼容的架构 安卓系统与车辆整合的其他途径是利用灵活但安全的多域软件架构.这些途径包括将安卓系统设置为GuestOS,或者设置到现有操作系统之上(例如以Linux Container方式),或 ...

  5. 10年c++码农的成长史,从菜鸟到Linux服务器开发系统架构师。

    今天我们来谈谈互联网这个行业,程序员的世界里有太多的心酸,多少人还未老.头先秃,多少人只能靠着越狱来过日子.每天面对电脑.敲着代码.改着需求.修着bug.每天都有新人加入.有人被淘汰. 这个高薪技术行 ...

  6. linux安装无线电软件,基于Linux的软件无线电系统软件平台的研究与实现

    摘要: 随着移动通信技术和互联网技术的高速发展,4G.5G等相关新业务.新标准正在频繁的演进和更新.新的协议标准在带来更高速率业务能力的同时,对通信协议算法的研究验证平台提出了更高的要求.同时,高速率 ...

  7. 支付系统高可用架构设计实战,可用性高达99.999!

    作者:冯忠旗 来源:juejin.im/post/5cfde01bf265da1bba58f863 一.背景 对于互联网应用和企业大型应用而言,多数都尽可能地要求做到7*24小时不间断运行,而要做到完 ...

  8. 可用性高达99.999%!支付系统高可用架构设计实战

    作者:冯忠旗原文:https://juejin.im/post/5cfde01bf265da1bba58f863 一.背景 对于互联网应用和企业大型应用而言,多数都尽可能地要求做到7*24小时不间断运 ...

  9. 云上应用系统数据存储架构演进

    简介: 回顾过去二十年的技术发展,整个应用形态和技术架构发生了很大的升级换代,而任何技术的发展都与几个重要的变量相关.本文将会给大家分享应用系统数据架构的演进以及云上的架构最佳实践. 作者 | 木洛 ...

  10. Linux系统查看系统硬件,linux怎么查看系统硬件信息

    有时候想查看电脑中的系统硬件信息不知道怎么办下面是学习啦小编带来的关于linux怎么查看系统硬件信息的内容,欢迎阅读! linux怎么查看系统硬件信息? 查看cpu: lscpu命令,查看的是cpu的 ...

最新文章

  1. html5 meta标签属性整理
  2. ThreadPoolExecutor使用错误导致死锁
  3. 有关多核一致性的理解和思考
  4. boost::lockfree::detail::tagged_ptr用法的测试程序
  5. Codeforces Round #441 D. Sorting the Coins(模拟)
  6. jzoj3918-蛋糕【二分】
  7. iOS 11 UICollectionView顶部出现白色间隔的问题
  8. math.ceil带小数点_JavaScript中带有示例的Math.ceil()方法
  9. 转换背景色 html,html – CSS转换:淡化背景颜色,重置后
  10. c语言的链表怎么写,写一个C语言的链表记录一下
  11. kubernetes权威指南_如何快速上手成为大厂标配的kubernetes?
  12. 如何连接到远程SQL Server
  13. Linux常用命令汇总--tree
  14. 图片剪切遇到的bug
  15. deepin php与nginx,深度Deepin20安装Nginx1.19+Php7.3+H5ai实践指南
  16. 2011年5月10日中兴通讯实习生招聘笔试小记
  17. STM32CUBE——使用DWT提供毫秒延迟
  18. 2022高处安装、维护、拆除考试模拟100题及模拟考试
  19. 计算机专业surface pro,surface pro4家庭版和专业版的不同
  20. 【项目管理】--- 变更过程

热门文章

  1. Windows Presentation Foundation 巡游
  2. android 画布叠加,Android实现图片叠加效果的两种方法
  3. 利用Snippet快捷键在TeXpad上快速初始化中文环境的LaTeX模板
  4. Web APIs:PC 端网页特效--常见网页特效案例--轮播图及节流阀思想
  5. bg算法 matlab,求助大神,有关BG算法
  6. oracle oca证书发吗?,考证之后如何知道oracle是否把oca和ocp在什么时间给我们发到哪儿了...
  7. amd显卡导致的开机短暂黑屏解决办法
  8. MySQL中CREATE DATABASE和CREATE SCHEMA区别
  9. 嵌入式Linux驱动学习【8】—— Nand Flash
  10. Linux——K8s存储(数据持久化)