我以下图为基础,说明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的语法编写脚本,以整合程序。

转载自:http://www.jb51.net/LINUXjishu/214104.html

嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构

硬件资料: 操作系统:(非虚拟机) zws@z-pc:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubuntu Desc ...

删除Kali Linux多余的系统架构

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

Linux和Windows系统的远程桌面访问知识(转载)

为新手讲解Linux和Windows系统的远程桌面访问知识   很多新手都是使用Linux和Windows双系统的,它们之间的远程桌面访问是如何连接的,我们就为新手讲解Linux和Windows系统的 ...

图解Android - Android GUI 系统 (1) - 概论

Android的GUI系统是Android最重要也最复杂的系统之一.它包括以下部分: 窗口和图形系统 - Window and View Manager System. 显示合成系统 - Surfac ...

图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)

Android 的窗口管理系统 (View, Canvas, WindowManager) 在图解Android - Zygote 和 System Server 启动分析一 文里,我们已经知道And ...

图解Android - Android GUI 系统 (5) - Android的Event Input System

Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...

Linux centos6.5 系统语言改成中文简体

有时候上传的文件在linux上ls显示的时乱码,原因可能是系统语言编码问题,以Linux centos6.5为例,解决方法如下: 1.在root(皇帝)权限下更改: 查看当前所有语言环境:locale ...

在Linux和Windows系统上安装Nginx服务器的教程

在Linux和Windows系统上安装Nginx服务器的教程  1.在CentOS系统上安装Nginx 在 CentOS6 版本的 EPEL 源中,已经加入了 nginx 的 rpm 包,不过此 RP ...

Linux/Android——Input系统之InputMapper 处理 (八)【转】

本文转载自:http://blog.csdn.net/jscese/article/details/43561773 前文Linux/Android——Input系统之InputReader (七)介 ...

Linux/Android——Input系统之InputReader (七)【转】

本文转载自:http://blog.csdn.net/jscese/article/details/42739197 在前文Linux/Android——Input系统之frameworks层Inpu ...

随机推荐

2016百度之星-初赛(Astar Round2A)AII X

Problem Description F(x,m) 代表一个全是由数字x组成的m位数字.请计算,以下式子是否成立: F(x,m) mod k ≡ c Input 第一行一个整数T,表示T组数据. 每 ...

js window.open()实现打印,如何在关闭打印窗口时刷新父窗口

var childWin = window.open("your URL"); //获取子窗口句柄childWin.onunload = function(){ //onunloa ...

smali 语法之if语句

# virtual methods .method public onClick(Landroid/view/View;)V .locals 3 .parameter "v" .p ...

Download the Hibernate Tools

首先去官网上下载最新版本的Hibernate Tools JBoss Tools 4.5.0.Final Requirements: Java 8 and Eclipse Oxygen 4.7 有 4 ...

Benchmark Test On Android Devices

一.Android设备上的Benckmark测试概述 同PC相比,在Android设备上的性能测试还没有一个公认的标准.也没有PC上那么多的测试程序集.但我们可以通过一些工具所得到的信息更好的了解设备 ...

Sublime Text 3 插件

1.快捷键:ctrl+shift+P 2.输入install package,选择install package 3.输入需要安装的插件,选择安装 4.重启sublime 1. 格式化 html-cs ...

非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry

非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry Glenn Berry 曾承诺对这个脚本持续更新 -- SQL Server 2012 Diagnostic ...

SQLite中SELECT基本形式

SQLite中SELECT基本形式 每个数据库通常都包含多个表,而每个表又包含多条数据.要获取数据库中的数据,就需要SQL语言提供的查询语句SELECT.本章将讲解和SELECT语句相关的内容,其中包 ...

vue中使用base64和md5

1.在项目根目录下安装 cnpm install --save js-base64 cnpm install --save js-md5 2.在项目文件中引入 import md5 from 'js- ...

linux的系统架构,(转载)图解Linux系统的系统架构相关推荐

  1. linux所有信号,【转载】Linux 信号列表

    信号及其简介 信号是一种进程通信的方法,他应用于异步事件的处理.信号的实现是一种软中断.它被发送为一个正在运行的进程,已告知进程某个事件发生了. SIGHUP 本信号在用户终端连接(正常或非正常)结束 ...

  2. linux光盘安装yum,[转载]将linux安装光盘配置为一个本地yum源

    将redhat6.1Enterprise安装光盘配置为一个本地yum源======================================== 1.环境 redhat advanced Ent ...

  3. 做系统ghost步骤图解_u盘装系统步骤

    时代进步,以前都是运用光驱驱动盘来装系统,现在渐渐的这种方法已经消失了,逐渐用u盘来安装系统文件.如何用u盘装系统呢? u盘装系统步骤 解决方法与步骤: 第一步:首先是制作一个能启动电脑的带Windo ...

  4. 2021韩顺平图解linux

    韩顺平图解Linux全面升级 https://www.bilibili.com/video/BV1Sv411r7vd 27 小时 .153 讲, 2021 韩顺平 一周学会Linux 简介 目录 P0 ...

  5. 开启计算机还原功能,如何打开系统还原,教您win7如何打开系统还原

    大家都知道win7和xp电脑系统都会有一个系统还原功能,这个功能很实用,我们日常生活中经常会遇到,错删一些文件或者是电脑中病毒之类的问题.这时候系统还原的功能就帮我们大忙了.对于系统还原许多的朋友可能 ...

  6. 【转载】Linux等类Unix系统学习用书那点事儿!

    Linux并不是一个比windows更神秘的系统. 是的Linux没有MSDN,但Linux和相关软件的文档绝对不比MSDN要少记得,一个看官方网站的文档,一个google.我想,大多问题都会解决的. ...

  7. Linux系统运维与架构设计之Linux概述

    Linux系统运维与架构设计之Linux概述 Linux系统运维与架构设计 1.1 浅谈计算机系统 1.1.1 计算机硬件系统 现代计算机是基于冯·诺依曼体系结构,由运算器.控制器.存储器.输入设备. ...

  8. Linux内存耗尽宕机6,转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案...

    原文链接: https://blog.csdn.net/u014740338/article/details/66975550 问题描述 Linux内存使用量超过阈值,使得Java应用程序无可用内存, ...

  9. 自学Linux 2—Linux 的系统架构之 Linux 内核的主要模块和 Linux 的文件结构

    Linux 的系统架构 Linux 系统从应用角度来看,分为内核空间和用户空间两个部分.        内核空间是 Linux 操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的.丰富并且 ...

最新文章

  1. linux中的gun含义,linux中gun的含义
  2. 人工智能中图神经网络GNN是什么?
  3. 号称用GPT-3开发的游戏,却活生生玩出了人性黑暗面
  4. MySQL在多表上创建视图
  5. memcache运行机制(转)
  6. 数组排序思想———选择排序
  7. 【每日一题】8月4日题目精讲—购物
  8. java 泛型类使用,集合中添加不同类型数据
  9. 构建之法第4.17章读书笔记
  10. python django前端重构_django修改models重建数据库的操作
  11. java swing复选框大小_Java Swing界面编程(28)---复选框:JCheckBox
  12. SharePoint 2013版本功能对比介绍
  13. 自然辩证法 题目2
  14. AUTOCAD——图案填充命令
  15. 德标螺纹规格对照表_螺栓螺母德标 欧标 国标对照表
  16. 计算机语言 指令,计算机BASIC语言    指令
  17. php tcpdf 没有头部,TCPDF使用总结 - 从头笑到尾的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. 手把手教你静态代码检查工具TscanCode安装与使用
  19. 国防科大计算机科学与技术专业排名,国防科技大学王牌专业排名
  20. 动物棋制作(C语言)

热门文章

  1. Python中sort与sorted函数
  2. mysql导出document_Mysql导入导出
  3. socket绑定的ip为INADDR_ANY 的意义 htonl(INADDR_ANY)(0.0.0.0所有地址、不确定地址、任意地址)(htonl和htons区别)
  4. 如何理解Linux shell中的“2>1”(将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出))(尼玛>符号竟然不支持搜索,害我搜搜不到,只能搜)
  5. linux ubuntu16.04 Clion 安装及快捷方式创建
  6. python numpy np.lexsort()(使用键序列执行间接稳定排序)(具体没太搞懂区别?)
  7. python 函数参数 (必选参数、默认参数、可选参数、关键字参数)
  8. TCP释放连接后实现端口的立即复用
  9. 特岗计算机老师年度总结,特岗教师个人年度工作总结
  10. Spring AOP讲解(Pointcut、Before、Around、AfterReturning、After)