03 操作系统基础

网友投稿 727 2022-09-21

03 操作系统基础

03 操作系统基础

仅为个人学习备忘,方便日后查阅

一、程序的执行过程

计算机本身就是一堆硬件,其中最核心的就是 CPU 和内存。为了实现计算机获得数据,数据的输入输出,需要输入设备和输出设备。在计算机体系内部,一般来讲,输入输出设备是通过南桥接入当前系统的。

对于一个简单的PC机而言,在某一个时刻只能运行一个程序。但是计算机的计算能力很强,一个程序运行程序内容所占用的 CPU 的时间不是特别多。为了能够尽可能地利用计算机的计算能力,需要将计算机同时运行多个程序,因此每个程序运行起来以后需要一个协调器,这个协调程序我们把它称为叫操作系统。操作系统还包含许多其它程序,此处称为内核 kernel 更合理一点。内核本身就负责管理硬件资源,并且将硬件资源虚拟成其他样子,提供给上层所需要的应用程序。

如果一个程序可以直接运行在硬件上,这个程序本身就可以控制硬件的各种属性。其他程序要想运行在硬件上,这些程序之间可能会产生干扰,一个恶意的应用程序可能会导致其他应用程序通通退出。所以需要一个统一的资源管理者,任何应用程序要想使用硬件,必须通过内核来完成。

内核也不会允许程序直接访问硬件,它是将硬件所提供的运算能力,通过一个一个地系统调用来实现的。

系统调用是非常底层的应用,程序员要想根据系统调用来编程会非常麻烦,非常烦琐,而且许多程序之间的功能是相同的。比如word需要打印,excel也需要打印,如果都自己开发,计算机上大量的功能是重复的,这种重复势必会额外地占用空间。从资源的组织角度来讲也不合理。因此操作系统除了提供内核以外,还将内核所提供的一些系统调用输出出来,这种输出是通过高层一点的调用接口来实现,这种接口我们把它称为库。

库本身也是应用程序,只不过这个应用程序没有程序的执行入口,它是不能自我独立运行的。只能被其他程序调用的时候执行。

程序员不使用库,直接在内核上编程也可以,只不过比较麻烦而已。所以调用除了系统调用以外,还有库调用(library call)。库对于一个操作系统,或内核而言,称为应用编程接口,API。

在库的上层就是应用程序,这个应用程序很可能直接运行在系统调用上,内核上,也有可能是通过库调用来完成。只不过使用库调用编程起来可能会更简单,但使用内核调用,它的执行效率可能会更高,因为至少不用使用库来完成了,而且它获得的操作权限也可能会更大。

无论有多少个应用程序,这些程序在操纵系统启动的时候,这个程序未必会运行起来,只不过说操纵系统启动以后,这些程序只是具备了运行条件,或者说已经有了运行环境,但它并没有运行。

通常启动一个程序的方式有多种。比如说,操作系统一启动,这个程序就自动启动起来。比如装完一个干净的操作系统,点开进程管理器,里面也有很多进程。这些进程是随系统的启动而启动的。这些进程有些可以称为服务,或后台服务。操作系统为了自身的运行,或完整的能力,启动一些程序才能让操作系统提供一个基本的功能。

有些是按需启动,比如需要编辑一个word文档的时候,才需要启动 word 。不然开机windows ,自动启动word,没有任何意义。这种程序需要手动启动,称为交互式程序。

敲了一下键盘之后,信息一定是由 CPU 先接收的,通过中断先到达CPU。CPU并不知道敲键盘这个信息意味着什么。能够跟硬件交互的只有内核,CPU在拿到这个信息以后,先通知内核来处理,内核会知道这个命令是由哪个进程发起来的。整个系统资源的监控,包括上层所运行的应用的监控都是由内核来完成的。内核会知道到底哪个进程处于当前焦点进程,而负责接收这样一个快捷键,或键的组合,由内核再转交给应用程序来完成。

二、隔离机制

操作系统本身也是一个程序,它也需要运行,就需要有指令和数据,而指令和数据是放在内存中的。那就意味着在内存当中既有内核,还有其他的应用程序。如果一个恶意的应用程序,能够直接访问内核,能够修改内核中的某些数据的话,意味着系统的稳定性将无从得到保证。所以必须有一种机制,能够将应用程序和内核隔离开来。

通常情况下,比如像intel这类的平台上,会提供所谓的保护机制,或保护模式。一般CPU有四个级别,是同心圆的四个环。最内层,称为0级别,或第0环,也称为特权级别。只有内核才能运行在特权模式下。而其他应用程序只能运行在最外层级别。中间两层没用。所以任何时候,应用程序是不能访问内存当中处于0级别的内存区域的。

CPU跟内存彼此之间是紧密结合的。CPU的0级别,会映射到内存中处于保护的某一段当中。

内存分为三段。

最底层的一段为BIOS的映射程序,POST加电自检之后,BIOS就自动映射到内存的开端之处。

然后载入操作系统内核。kernel space

再后面的空间被多个应用程序所共享。

但是,这样去划分内存,非常容易产生内存碎片。

三、shell

shell 是整个操作系统的外壳,是能够实现接收用户指令,理解用户的命令,并且将它传输给内核,由内核指挥某个应用程序启动的这么一个界面。

GUI: Graphical User Interface 图形界面的 shell

CLI: command-line interface 命令行接口

无论是 GUI 还是 CLI 也是应用程序,所以在不同的操作系统上,它们可能有提供的不同的替换版本。

linux 常见的有三种图形界面,gnome,kde,xface

windows 上只有一种,而且是无法替换的。 windows 2008之前 shell 是直接做进内核的,无法替换。windows 2008 提供了 power shell 这样的接口,也可以不用使用图形界面了。

而对CLI而讲,DOS 本身就是命令行,而linux 的 shell 就有很多。

GUI 和 CLI 也是应用程序,而且在这个接口下所启动的任何应用程序,如果把GUI 或 CLI 关闭,那在这个接口下所启动的应用程序也会关闭。比如将 windows 桌面注销了,那启动的 word 也会退出。

四、内核的功能

进程管理

内存管理

文件系统

网络功能

硬件驱动

安全机制

五、操作系统历史

批处理系统

是现代操作系统的前身。当时没有操作系统的前提下,我们的每一个程序都是直接在硬件上运行的,表现为一个一个的作业。

作业一执行完了,它会自动地载入第二个作业,彼此之间使用分隔符分开。

jobs1$$$$$$$$$$$jobs2$$$$$$$$$$$$

第一个程序执行完了,再执行第二个程序。这是远远无法发挥出我们硬件的功能的。

2. Multics

这时有是三个组织,GE (通用电气),美国的电报电话公司(AT & T)的 Bell 实验室,以及麻省理工大学 MIT 的人工智能实验室,联合起来研发比批处理高级的 多任务、多用户的系统。使用汇编语言来开发出来适用于大型机 MainFrame ,能够支持多任务和多用户的系统,称为 Multics.

这时它们已经完成了基本的功能,GE 首先退出,然后 Bell 退出,留下 MIT 研发。

3. Unix

Bell 大概 1970 年退出,当时为了研发招收的科学家就空闲起来了。 其中就包括 ken 。

Ken Thompson:

Space Travel  使用 VGA 图形卡。当时只能运行在 Multics 上。由于 Bell 退出,Ken 无法再免费使用 Multics

70年代,主要生产计算机的公司除了 IBM 还有 DEC.

DEC:

PDP  系列 ,当时最新是 PDP-11

VAX  系列 -- vms

Space Travel 是应用程序。应用程序要运行起来,必须依赖内核。Ken 利用 PDP-7 凭借它对 Multic的理解,开发出一个简单的内核来运行他的 Space Travel ,后来成功了。他在 Bell 实验室到处推销他的游戏。但是大家对他的游戏不感兴趣,倒是对他的系统感兴趣。

应用程序是用汇编开发的,汇编是跟硬件平台紧密结合的。PDP-7 上开发的应用程序想运行在其他系统上不可以。所以Ken 重新移植到其他主机系列上。成功后,它的系统风靡 Bell 实验室。后来他的同事戏谑地称他的系统为 Unics 。因为系统功能非常简单,相对于 Multi 所以叫 Uni 。后来改为 Unix 。

Dennis Ritchie:

这时 Unix 都是使用汇编研发的,性能不错,但移植困难。为了能够扭转这种劣势,Dennis 希望使用高级语言重新开发 Unix 。这样只要使用不同的编译器,在不同的平台版本上编译,就能完成 Unix 的移植。因为高级语言对底层的硬件依赖程度是非常低的。

Dennis 对 B 语言引入了变量、地址等,开发了 C 语言。在当时,高级语言的运行效率比低级语言至少要低 30% 。

1974年,Dennis 和 Ken 在计算机通信杂志发表 Unix 论文。Bell 属于 AT & T 。根据反垄断法,AT & T 不能销售除了电报电话以外的任何商品,不但不能出售,别人要还得给,无偿提供。计算机年会,当别人索要Unix的时候,他们不得以,只好无偿提供。

Bill Jey:

成立了 BSRG ,伯克利操作系统研究小组。

1976年,Ken到美国加州大学伯克利分校任教。 此前,伯克利就获得了 Unix 源代码进行研究。

TCP协议的拥塞控制等功能都诞生在 BSRG Unix 这个版本上。

BSD: Berkely System Distribution 伯克利系统发行版

融合了各种功能,Bill Jey 将 Unix 对外发布,并改名 BSD 。开始卖钱,牟利甚多,引起贝尔实验室不满。

System: 贝尔实验室的 Unix 版本.

后来贝尔实验室被卖给了 Novell,从此不再受 AT & T不能销售操作系统的约束。分拆出来以后,迫不及待卖钱,一个授权 4万美元。到底谁是正统,谁该卖,谁不该卖,跟 BSD 打官司打了十年。

Microsoft: 81年,在美国西雅图一个小公司,Microsoft 成立

IBM 、康柏公司 开始生产 PC 机。

任何计算机没有操作系统没法用。而 Unix 当时只能运行在PDP系列上。Unix 始终没有往 PC 兼容机上移植。当时PDP用的是摩托罗拉公司的M68K CPU。而 PC 机用的都是 Intel 的 8086,8088 ,80286.

当时Intel语言界面丑陋,性能很差,Unix 程序员不屑于把Unix运行在PC机上去 。

CP/M

买一个PC大概2-3万美元,买一个CP/M大概也要3万美元。

微软三个人卖 Basic 编译器,包装发型 Unix ,起名 Xenix。

DOS:Disk Operating System,单用户,单任务。

PC机卖出上百万台,DOS获得千万美元利润。

jobs:

这种好的现状,自从另外三个年轻人,创立了另外一家公司以后就破灭了。

乔布斯非常崇拜计算机科学之父图灵。图灵吃了抹了×××的苹果死去。所以乔布斯的公司命名苹果。

乔布斯在apple1上装的是 Unix,界面比DOS好。cpu用的不是 x86,而是 Power.

Xerox: 施乐公司,生产复印机。

PARK实验室:在 Unix基础上,研究出了第一个鼠标,第一个图形操作界面。乔布斯溜进实验室,发现这个研究成果。找到公司,买走拷贝。组织团队研发,apple2 发型的时候,图形界面已经出现。

这对比尔盖茨是当头一棒,DOS还有谁要,于是接近乔布斯,从乔布斯这里骗走一份拷贝。当乔布斯发现的时候,比尔盖茨已经将他的系统重命名为 Windows 。(基于DOS开发)

乔布斯系统是封闭的,不单卖,要买机器一块买。Windows 只卖许可证。

FreeBSD: 世界上第一个能运行在PC机上的正统 Unix 。

OpenBSD: 专注于安全

NetBSD: 专注于服务

迄今为止,苹果的Unix的核心都是 FreeBSD 的内核。

Sun Microsystem: Bill Jey 联合另外两个人成立。

生产工作站,比小型机要轻量级,但性能不差,有自己独立的操作系统。

Sun OS --> 为了避免官司,由BSD 转而使用贝尔实验室的 Unix,改名 Solaris .正统 Unix 。只能运行在Sun 自己的硬件 SPARK 上。

Bill Jey 还引入了 CSH,兼容 C语言风格的 shell 。

Windows 95,98本身基于DOS,DOS本身就是梦魇。

Windows NT: (new technology)DEC 生产的VAX使用 vms操作系统。比尔盖茨引入vms,在vms基础上开        发。内核不再是 DOS,而是 vms

六、Linux

Andrew:

当Unix开始卖钱之后,很多科研机构就不能再免费使用 Unix了。于是荷兰的 Andrew 仿照 Unix 开发 Minix ,上课用。

有一年到芬兰赫尔辛基上课。Mixnix 是开发在教授自己的主机上的,很多地方是用汇编语言写的。因此他的学生要学习 Minix,装在自己的主机上,不得不自己开发驱动程序。

Linus: 自己写了个系统,叫 Linux 。

80年代,Stallman, 倡导软件自由。

GNU: GNU is Not Unix 。递归缩写。

GPL: General Public License  自由

Emacs: 文本编辑器

gcc: GNU C Compiler ,转成二进制

bash

Linux: 只是一个内核。它不是应用程序,它没有库,库在 Linux叫 glibc .gcc 是编译器。

ABI: Applicaiton Binary Interface

编译必须要两个平台完全一样,意味着编译之后期望它能在 x86机器上运行,那就必须在 x86 上进行编译。否则,编译出来的程序只能在当前CPU上运行,拿到其他主机上运行不了。

交叉编译:在A机器上编译,拿到B机器上运行。尽管都是二进制,都是 Intel 的 CPU,在酷睿上编译的程序,不一定能奔腾在上运行,因为 CPU 支持的二进制格式各不相同。

GNU/Linux: 完整的操作系统,GNU还提供很多外围软件。

无论 GNU 的软件,还是 Linux 的内核,都是源代码,是 c 开发的程序。任何程序要运行,得编译成二进制。编译成 01代码,计算机才能识别,计算机才能运行。

Linux 通过源代码的方式向全球的使用者来发布,谁来负责编译呢?

第三方组织,负责编译 Linux 内核,和各种外围应用程序。并将它们做成打包发行成可安装的便捷的这种方式的Linux,直接做成二进制向外打包发布。

Linux 发行商:release

本身都不是Linux的拥有者,只负责将源代码格式的Linux,在通用平台上编译成通用格式,使得其他人拿到以后可以在大多数硬件平台上安装并使用。

SLS: 91年

Debian: 92年。唯一没有商业公司支持。高级用户中流行

Red Hat : 93 年成立于北卡罗来纳州。北美、中国流行

SUSE:被 Novell (Netware)收购了。SUSE前身 SLS。欧洲流行

Ubuntu: 基于 Debian 的二次发行版。界面漂亮,主要基于PC机使用。

Mint: 基于 Ubuntu 二次发行,更漂亮

内核由Linus维护,软件由GNU组织维护,发行商只负责包装发行,只是在包装发行过程中,加入了自己对于一个操纵系统的理解,加入了自己对于某些参数的调整,加入了自己公司的 LOGO,使得 Linux 看起来各不相同。事实上,内核一样,软件一样,可能配置文件不一样而已。

包管理器:

Linux 有内核,GNU提供软件,打包发行的时候不能把所有软件都装上去。早期软件都是打包在一块进行安装的。这不便于软件包的单个管理。

Debian: dpt

Red Hat: rpm

这些系统它们本身都遵循 GPL,就算是红帽把它做成了二进制格式,但它也要把它的软件包的源码格式公布出来,因为 GPL 有这种规定。

GPL: 任何人,当你获取GPL组织的软件程序以后,无论你怎么改,改完以后必须要把你改的内容也一并    公布出来,不公布你就侵权。它们主要是为了保证软件自由的。

所以GPL就像病毒一样,任何人都不敢沾它。假如软件有20行,我借鉴了10行,后来又开发了一万    行,那这一万行必须得公开。

LGPL: Lesser GPL

GPL v2

GPL v3

GPL 是非常严格的

其他开源协议:

BSD

Apache

BSD 和 Apache 要宽松得多。

开源:开放源代码

自由:

自由获取,自由修改,自由学习

Linux 是GPL的,所以红帽发行的时候,要发布两种版本,一种是包装好的二进制格式,一种是发布源代码格式的。

Windows卖的是版权,Red Hat 卖的是服务。

CentOS: Community Enterprise Operating System

红帽只要发布源程序,CentOS,就把它做成二进制,而且跟红帽一模一样。

红帽是红帽公司的注册商标,因此改名叫 CentOS,图表不一样,LOGO不一样,但是程序格式是      完全兼容的。但是 CentOS 不提供服务保证。

国内用的最多。

Fedora: 红帽开始发行个人版,到9.0 ,在2003年终止,后来捐献给 Fedora。

Fedora 再测试稳定以后,会引入后续的红帽企业版。

Mandriva: 桌面

Linux是内核,是内核就有版本,0.1, 1.0, 2.0,...

官方站点 3.0, 4.0, 5.0, 6.0 红帽发行版的版本

七、Linux 基本原则

GUI接口:双击

CLI接口:执行命令,给出执行文件的路径。

命令提示符:(给你一个提示符,在这个符号后面可以输入命令) prompt bash

两种不同的展现形式:

# :root 管理员

$ : 普通用户

Linux 跟 windows 不同,用户类别非常简单,就两类,管理员,普通用户。

命令:shell本身就是命令行接口,当我们输入命令以后,这个命令会被 shell 送给内核,由内核判       断这个命令是否具有执行权限,还包括从什么地方开始执行(任何程序要想执行必须得有执行       入口)。

命令格式: 通常由三部分组成。

命令 选项 参数

选项:

短选项: -

多个选项可以组合: -a -b = -ab

长选项: --

长选项不能组合,必须要分开来写。

参数: 命令的作用对象

用户的登录和切换:

su: switch user

exit: 退回原来的选项

# su [-l] 用户名 : [] 内表示可省略的

修改密码

# passwd

密码复杂性规则:

1. 数字,大写字母,小写字母,特殊字符,四种中选三种

2. 至少7位

3. 随机字符串

4. 定期更换

5. 循环周期要足够大: 尽量不要使用最近使用过的密码

Linux 哲学思想之一,能简写绝不全写。

Linux 严格区分大小写

虚拟终端(terminal):

在 VMware 中,ctrl + alt + F2 切换到另一个用户,ctrl + alt + F1 又回来了,

ctrl + alt + F3 又是一个新的用户。

startx & : 启动图形界面, ctrl + alt + F1 切换回去。

GUI:

Gnome: c 开发

KDE: C++

XFace: 嵌入式

CLI:

sh

bash

csh

zsh

ksh

tcsh

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:elk 安装与所遇问题
下一篇:Python常用68个内置函数(python的68个内置函数)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~