knight_ka | 生活及学习笔记

操作系统OS简要了解

操作系统OS的简要介绍

Von Neumann存储程序式计算机的组成:

- 存储器 --> 用于存储程序和数据(分为主存和辅存)
- 运算器 --> 用来执行指定的指令(ALU)
- 控制器 --> 用来控制指令的执行顺序
- IO设备 --> 输入数据和输出结果的设备

现在计算机中的CPU是由运算器和控制器组成,负责程序的控制和执行。

核心硬件介绍:

1.CPU(Central Processing Unit)中央处理单元:是一种能够解释指令、执行指令和控制操作顺序的硬件设备。

它是由ALU和控制单元组成,其中:
    1.**算计逻辑运算单元**ALU
        算术逻辑操作功能单元、一组通用寄存器和状态寄存器组成。
        通用寄存器用来为功能单元提供操作数以及暂存操作结果。
        状态寄存器用来保存cpu当前的运行状态信息。
    2.**控制单元**
        程序计数器 --> 用来指示下一步指令。
        指令寄存器 --> 用来保存当前正在执行的指令。

CPU小汇
CPU的概念大概就是这样,在具体的工作过程中,他是计算机的核心,所有的操作都必须经过它来完成。当用户输入一段程序,首先会通过输入设备保存在内存中,然后由控制单元提前出第一条指令保存在它的指令寄存器中,然后把这条指令应该执行的操作交给算术逻辑单元ALU,由ALU具体的去执行这条指令,由于这一条指令运行中可能要暂时保存一些值,ALU就把运算中间环节中产生的值保存在通用寄存器中,直到运算结果,把最终结果保存到存储器中。(由于在这条指令的执行中有可能发生某些意外,导致CPU要求执行别的指令,所以要把CPU当前的运行状态,一些具体信息保存起来以便CPU再回来执行本条指令的时候知道应该怎样去执行,这就是状态寄存器要做到的事情。)

2.储存器

储存器分为主存和辅存。

主存就相当于现代电脑中的内存。他的特点是储存量小,随着计算机的关机而自动清空,但是存取速度快。由地址寄存器,数据寄存器和命令寄存器三部分组成。

辅存就相当于现代电脑中的磁盘。他的特点是容量大,存取速度慢。一般需要持久化的数据由计算机在工作过程中把数据写入到辅存设备。

核心硬件总结:

对于编程人员来说,适当的理解一下计算机中各设备的执行原理会对编程过程的一些问题有更加深入的理解。比如理解C语言的运行,如果理解了计算机内部操作就可以非常方便的联想到,c语言编译后进行执行的过程,c代码会被编译器编译成操作系统可以直接识别的指令,再由操作系统操控各个计算机硬件去执行这些指令,在执行的过程中是由编译后的c指令调用操作系统的输入接口,再由操作系统调用输入设备的接口把c指令进行执行,执行过程中由cpu去内存拿取这些执行并进行顺序执行,最终把执行的结果保存到主存中,然后如果有一些指令是调用计算机的输出设备,则操作系统就会调用输入设备接口把这些内存中的数据进行输出或者保存早磁盘中。

操作系统的发展:

操作系统是计算机中非常重要的一部分,它是连接硬件和软件的枢纽。在裸机上装了操作系统,然后用户再通过操作系统操作计算机进行具体是运算。操作系统的发展是非常神奇并且非常酷炫的。

1.原始阶段:

最开始时,没有操作系统,并且计算机是非常庞大的,计算机的执行运算的过程都是通过人为参与来完成的,比如说把运算的中间结果拿给计算机的另一个不见来进行完成,这些操作都是人为参与的。但是计算机的运算速度是非常之快的,而人的操作远远跟不上计算机的运算速度,这就造成了计算机的性能不能充分发挥。所以必须进行改造、优化。

2.早期的批处理阶段:

批处理,顾名思义就是批量处理作业的计算机。要做到批处理就是必须完成这些事情:1.计算机有一个存储中心可以把计算到的数据临时保存以供下一环节使用。2.计算机必须知道这个操作结果后的下个操作是什么。3.批处理是多个作业的批处理,所以当一个作业的全部命令执行完毕时,计算机需要有一个机构自动开始下一作业任务。

这个时候就有了监控程序(控制器)用来控制作业的执行顺序,用磁带来保存数据。主要的工作流程是:

操作人员首先把程序录入到磁带中 –> 监控程序去检查计算机的状态能不能完成当前作业 –> 如果能 –> 编译程序把磁带中的源代码编译成目标代码 –> 连接程序对目标文件中的引用进行连接形成一个可执行文件(一条一条计算机指令) – > 监控程序将指令从磁带中读取出来进行逻辑运算 –> 最后将计算结果输出 –> 开始下一个作业的指令执行。

这个阶段存在一个问题,所有的IO操作都是由这个监控程序来完成的,这个监控程序就相当于CPU,而CPU的计算速度是非常快的,而读取磁带中的数据,输出数据到磁带这个过程相比较来说是非常慢的,这就大大制约了CPU的性能不能充分发挥。所以有了下一阶段

3.脱机批处理:

脱机批处理是为了使计算机能够充分发挥计算效率,而不受IO速度的制约而出现的,它是通过两台计算机来完成的,第一台计算机主要负责将作业存入磁带及将磁带中的数据输出这个工作,第二台计算机和第一台计算机使用同一个磁带,这时候第一台计算机已经把磁带中写好指令了,只需要第二台计算机从磁带中取出指令直接进行计算即可,计算结束后把结果在放回磁带中,最后再有第一台计算机把磁带中的结果输入到输入设备。

这样就解决了IO设备与CPU计算速度的矛盾。

4.执行系统

脱机批处理是两台计算机,不仅耗费资源,而且使用不方便。并且有一定的安全问题,比如用户输入一个非法指令,使程序陷入了一个错误中,这时候就必须人为进行参与将计算机进行重启或者其他的处理操作。

随着技术的进步,这时出现了通道和中断技术。通道是一个专用的处理不见,它能够实现IO设备和主存之间的信息传输,不需要CPU直接参与,只需要cpu发出一条控制指令,通道就能自动把设备中的数据读取到内存中。这就实现了IO操作和CPU计算操作的并行,从而做大化了计算机性能。中断技术是计算机收到某条执行,马上去执行别的事情,停止当前的工作,当别的事情执行完毕后再回过头来执行当前的工作,这就在一定程度上组织了用户的非法程序。

执行系统节省了一台计算机,降低了成本,实现了通道与CPU,CPU和外设的并行操作,还增加了对IO传输过程中的检查工作,利用中断技术保证了系统执行的安全性。

5.多道程序设计技术:

执行系统解决了cpu和io设备的并行执行,这是多程序设计的基础。当计算机运行单程序时,常常因为等待IO的执行而使CPU处于等待状态。所以利用io和cpu的并行,设计了多程序技术,当第一个程序在进行io操作时,这时候用中断技术把当前的cpu执行状态进行记录,然后使另一个程序进行cpu的运算,另一个程序需要进行io操作时,如果前一个任务的io操作执行完毕,cpu再转回前一个任务继续执行,使多道程序交替执行。

6.分时技术:

多道程序设计技术使批处理系统最大化cpu的性能。但是这种批处理系统一般都是用于脱机操作方式,用户再计算机执行过程中不能对程序进行控制。

如果一个计算机是可以被多个用户终端进行访问的,那么它的资源有限,多个用户同时访问,而cpu同一时刻只能执行一个指令,这就造成了用户的访问等待现象,为了解决这一现象出现了分时技术。

分时技术把处理机的时间分成各个时间片,轮流分给各个用户使用。如果这个时间片用户的程序没有执行完那就等待下个时间片的分配。这样,每个用户的请求都能得到相对较快的处理,好像是每个用户独占一台计算机一样。

细想一下:现在的操作系统肯定都是用了分时技术提供给用户访问,也使用了多程序处理技术使io和cpu解决了矛盾问题。分时和多道程序技术虽然都是处理多个程序的并发执行的,但是它们两个并不矛盾。一个是用来解决io与cpu的性能问题的,一个是用来解决cpu分配问题的。
这就是计算机操作系统的发展历史。

现代操作系统的特性:

1.并发:

执行多个用户同时访问计算机。同时指的是:一个用户程序进来了 还没有执行结束的时候另一个用户程序也进入计算机开始运行,这时候CPU在同时处理这两个用户程序,这就是并发。在单处理机操作系统中,这些程序在处理机上其实是交替的顺序执行,所以这种并发行为只能说是宏观上并行,微观上串行。但是在多处理机计算机中,计算机在同一时刻可以执行多道程序,这些程序可以说是真正的物理的并行。

2.共享:

既然有多个用户访问,那就必定存在计算机资源共享问题。

3.不确定性:

计算机中各个设备的状态都有可能随时出现问题,或者程序运行时本身出现问题等,这些问题都是不确定的。所以用户程序在计算机中的执行有一些不确定因素

操作系统的分类:

1.批处理操作系统
2.分时操作系统
3.实时操作系统
4.嵌入式操作系统
5.个人计算机操作系统
6.网络操作系统
7.分布式操作系统

操作系统核心技术:

1.并行处理技术:可以有效的控制多个程序的执行调度等问题

2.虚拟技术:

虚拟技术是很重要的一个思想,很多地方都会用到虚拟技术。

计算机的配件有很多,这些配件的实际操作是非常复杂的,为了方便用户使用,一般采用虚拟的配件,让用户感觉是在调用真实的配件,其实操作系统内部对这个调用过程进行了封装,由操作系统虚拟机去调用配件接口,它给了物理资源更强的能力,方便了用户对计算机的使用。不仅可以直接操作硬件指令,还可以操作操作系统提供的其它指令。

JVM

JVM:java虚拟机的作用,java编译的class文件是通过jvm来进行运行的,而class是平台无关的字节码文件,class在运行过程中其实还包括了再翻译成机器码的过程,而操作系统不同,要翻译的机器码就不同,这时候就需要用不同操作系统的jvm来进行运行翻译工作了。从而实现了class文件的跨平台。而c语言是在编译的时候用适合不同平台的编译器进行编译,所以编译后的文件不能跨平台,但是性能更高。而java是编译器都是一样的,编译后的class一样,只不过运行的jvm环境不一样,所以java是通过jvm来实现的跨平台,是字节码级别的跨平台。因为针对不同的平台使用不同的编译是非常不方便的。