初识操作系统


计算机由哪几部分组成?冯诺依曼结构

1. 计算机的结构 – 冯诺依曼体系

在这里插入图片描述

1.1 CPU

CPU又叫中央处理器,是计算机的大脑。

  1. 最初CPU是单核(由很多个计算单元组成),通过减小CPU上每个计算单元的体积大小,提高计算单元的集成程度,来提高CPU的速度。当计算单元小到无限小时再想缩小会受到阻碍,经典物理学不再起作用,开始需要量子物理学。
  2. 当单核的发展开始受到阻碍时,可以用多核。核心分为物理核心和逻辑核心。物理核心,指硬件上镶嵌进去的核心数,而逻辑核心,指一个核心可以做几个核心能做的事

现在主要的CPU厂商是intel和AMD

【了解intel的CPU产品线】

  1. 给服务器用的,志强
  2. 家用的,酷睿
  3. 给嵌入式低功耗设备,赛扬

【了解AMD的CPU产品线】

  1. 给服务器用的,霄龙
  2. 家用的,锐龙

注:一般CPU的代数是一代比一代强的,如13代的i5性能大于12代的i7,这里的i代表CPU质量,i9 > i7 > i5 > i3

* 如何衡量CPU好坏
  1. CPU主频
  2. CPU核心数
    在这里插入图片描述
    能看到我的电脑CPU主频为1.9Ghz,主频是在时刻变化的。而任务管理器中CPU在执行任务时频率一直在发生变化,这个当前的频率就是睿频

1.2 存储器

存储器分为内存和外存

  1. 内存,容量小,价格贵,速度快,掉电后数据丢失
  2. 外存,容量大,价格便宜,速度慢,掉电后数据不丢失

1.3 输入设备

1.4 输出设备

2. 详解CPU

2.1 CPU的构成

1. 算数逻辑单元ALU
2. 寄存器Register和内存RAM
3. 控制单元CU
4. 指令Instruction(重点)

指令是以二进制方式表示的机器语言,是CPU能执行的最小单位。不同的CPU支持的指令是不同的

3. 操作系统

3.1 操作系统定义

操作系统有内核和配套的应用程序组成,内核负责为应用程序提供支持。常见的操作系统有Windows,Linux,ios,Android等等,这些操作系统本质上是搞管理的软件:

  1. 对下,管理所有的硬件设备
  2. 对上,给软件提供稳定的运行环境

不同的系统,API也不同。系统API已被封装进JVM内部,Java开发不会直接接触到系统的API,这也体现了java的"一次编译,到处运行"的特点

【举例】

  1. 对下:比如台式组装机,用不同配置的硬件设备组装好的电脑为什么可以使用?因为有操作系统,它认识鼠标,键盘等几个大类的硬件设备。有些鼠标有其他功能,硬件厂商开发硬件时会开发一个驱动程序,用户在电脑上安装该程序,让操作系统通过驱动程序来实现鼠标的其他功能,驱动程序在系统内核中运行
  2. 对上:手机和电脑可以同时运行多个程序,比如边听歌,边打游戏。一个程序的运行可能是用户态,也可能是内核态

3.2 操作系统中的进程/任务

进程,指正在进行的程序,是系统分配资源的基本单位。一个应用程序只有运行起来才叫一个进程(process),操作系统中有许多进程,每个进程的运行都需要消耗一定的资源

3.3 进程管理——PCB

任务管理器中可以看到,电脑的进程非常多。操作系统是如何管理进程的?

  1. 描述进程:用类/结构体,将需要描述的对象的属性表现出来
  2. 组织进程:用数据结构将这些对象连起来,方便后续对进程的CRUD

由于操作系统内核是用C/C++写的,所以系统中会有一个结构体来描述进程,这个结构体称为进程控制块—PCB
系统中会用类似于双向链表的数据结构来组织这些PCB,创建进程就是插入链表操作,销毁进程就是删除链表操作
PCB负责描述进程的属性,一个进程可以用一个或多个PCB表示(线程)

3.4 详解PCB的属性

1.进程的身份标识 – pid

每个进程都会有一个pid,相当于人的身份证号

2.进程持有的内存资源 – 一组内存指针

进程在运行时需要操作系统分配一定的内存空间,会有一组指针指明该进程的被分配的内存空间在哪里,该内存空间有哪几部分,每个部分的作用

将exe程序双击变成进程,进程会被操作系统加载到内存,CPU再从内存取指令执行指令。在这个过程中,exe中的数据需要加载到内存,exe运行时产生的临时数据也要保存,这些数据需要分门别类的放起来以便管理,所以需要用一组内存指针来指明这些事

3.进程持有的硬盘资源 – 文件描述符表

进程涉及到硬盘操作时,需要按照文件的方式来操作硬盘

当前进程能操作哪些文件,关联了哪些文件等内容会以顺序表的数据结构被存储起来

4.进程持有的CPU资源 – 进程调度(含4个属性)

进程的持有的CPU资源体现在进程调度上,进程想运行需要到CPU上执行,早期CPU是单核且当时操作系统只能执行一个进程,没有进程调度,这就导致在打游戏时其他程序都未运行,而进程调度可以让打游戏的同时还运行其他程序

进程调度,指操作系统调动不同进程到CPU执行,并按照某些属性调整每个进程占用CPU的时间

【提问】

  1. 一个CPU核心同一时刻只能执行一个进程,但核少进程多,如何解决?可以让多个进程轮翻到CPU上执行,这就是并发(分时复用)
  2. 多个进程轮翻占用CPU时,CPU资源是否要均分?不能,比如同时运行大型游戏和QQ两个进程,游戏为了流畅,会分配更多资源。

那操作系统是根据什么来给进程分配CPU资源的?主要根据PCB中的四个属性

  1. 进程的状态:进程状态有就绪状态和阻塞状态,还有其他状态这里不做讨论 就绪状态:进程正在CPU上执行或时刻准备着去CPU上执行 阻塞状态:进程不具备某个去CPU上执行的条件,比如正在等待用户输入。
  2. 进程的优先级:优先级高的进程会获得更多的CPU资源。比如同时运行大型游戏和QQ两个进程时,游戏优先级更高
  3. 进程的上下文: 进程在离开CPU需要保存现场,把在CPU上执行时的各种寄存器的状态都记录到内存中,下次进程回CPU就可以把保存的寄存器的值恢复回去,沿着上次的执行位置继续执行(类似于游戏的存档,读档)

CPU中有些寄存器只是保存运算结果,而有些寄存器则负责其他,

  1. 保存程序当前执行到哪个指令(程序计数器)
  2. 维护栈相关的寄存器:维护当前程序的调用栈,栈说明了程序中方法之间的调用关系。等进程回到CPU执行就可以继续完成下面的调用关系。
  1. 进程的记账信息:记账信息负责记录进程持有的CPU资源的多少,优先级属性会对进程进行分配资源,这就导致极端情况下有些进程一点也分配不到,记账信息就会记录上,偶尔让这些进程也去执行一次

3.5 进程之间的独立与通信

1. 进程的独立

程序的运行是需要分配内存的,早期操作系统分配的是物理内存,每个进程都被分配了内存中的一块,一旦A进程越界访问到B进程就会把B的内存写坏

【图示】
在这里插入图片描述

虚拟内存,指把被分配的物理内存映射为虚拟内存,让进程以为自己独占了整个内存。进程操作虚拟内存中的某个数据需要告诉操作系统虚拟地址,系统会将虚拟地址翻译为物理地址(用页表来映射,页表是类似于Hash这样的映射结构),再操作物理地址。

2. 进程的通信

上述是把进程隔离开了,但进程之间要如何通信呢?实现的但方式有很多,但核心都是“借助一个公共空间实现信息交互”,Java这里只讲两种方式

  1. 通过文件
  2. 网络(Socket)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值