文章目录

  • 前言
    • 操作系统的概念及常见的OS举例
    • 操作系统的定位以及它的功能/职责/作用
  • 全程高能!!!敲黑板警告!!!
  • 一、进程概念(感性认知)
  • 二、进程的描述和组织!!!
    • 描述
    • 组织
    • 大体认知
  • 三、进程描述之进程调度/CPU分配详解!!!
  • 四、进程描述之内存管理/内存分配!
  • 五、进程之间通信
  • 六、相关拓展知识(了解即可)
    • 进程和线程的区别
    • 内存管理主要研究的问题
  • 参考

前言

虽然,本文我们主要讨论的是软件视角下的操作系统,但是我们还是对操作系统做一个整体概述即软件+硬件角度说明。因为细节很多,所以整篇文章会比较长,请屏幕前的你做好准备嗷~

文章最后附本文的思维导图

操作系统的概念及常见的OS举例

定义:操作系统就是一组做计算机资源管理的软件统称,英文名字叫做operating system,简称OS。

简而言之,它就是一类用来做管理的、分配资源的软件。如果把整个电脑比成一个公司,那么操作系统就相当于是董事长或者总经理。

常见OS举例

  1. windows系列,我们常用的基本上就是这个windows系列。
  2. Linux系统,是我们程序猿必须要掌握的系统。为什么呢?因为它特别适合开发和部署,比如服务器、嵌入式设备以及移动端设备基本上都是使用的linux系统,并且目前公司中绝大多数使用的都是这个系统,而非我们更为熟知的Windows。
  3. Mac系统,也就是苹果电脑中用的系统。
  4. Android系列,是手机端的操作系统,在谷歌旗下,本质上也是linux
  5. ios系列,也就是苹果手机中的OS,与mac系列是同根同源的。
  6. 鸿蒙……

操作系统的定位以及它的功能/职责/作用

定位:

1.是设备中软硬资源的管理者

2.是程序跑起来的必备条件

补充知识

电脑能直接识别的只有机器语言(机器码、0、1组成的字符串序列),前辈们为了方便使用,设计了汇编语言(指令集,由一些单词组成的字符集),通过汇编语言操作电脑。但是这还不够方便,所以后来又发展出来了高级语言,我们可以通过高级语言来操作。例如java,编译后生成字节码文件(高级语言----》汇编语言),运行时,字节码变成机器码,被电脑识别(汇编语言—》机器语言)。

操作系统因为对硬件和软件方向都需要是绿灯,所以,需要提供一套指令集方便使用者编写、同时方便电脑硬件识别,以便于驱动硬件,完成程序的执行。但是不同的OS厂商设计的指令集会有所不同,所以,他们提供的驱动程序也不尽相同。

功能

操作系统(OS)是硬件、软件、用户之间交互的媒介。对上(一般的app),起着给软件提供稳定的运行环境的作用;对下,起着硬件设备管理的作用。

全程高能!!!敲黑板警告!!!

一、进程概念(感性认知)

我们已经知道了,OS为软件提供了操作环境。那么具体是怎么操作的呢?OS对软件通过进程来管理。那么什么是进程呢?

概念:一个跑起来的程序,就叫做进程/任务。进程英文名字叫做process,任务名字叫做task。

例如,我们windows系统就可以通过ctrl+alt+delete调出我们的任务管理器,其实也就是我们这里的进程管理器。

这里我们需要区分两个概念

进程&程序

1.从概念角度而言

程序:是一套数据处理的步骤,是静态的,表现为一个或一组文件。

进程:进程是程序的一次执行过程。

2.从用户角度而言

一个程序可以多次执行即有多个进程,甚至可以多次同时执行(宏观角度)。进程是程序在运行时的视觉主体。

3.从OS角度而言

进程是OS进行资源分配的基本单位/最小实体。

进程是一个非常重要的软件资源,是由操作系统内核负责管理(描述和组织)的。

那么OS究竟是怎么进行描述和组织的呢?我们接下来详细讨论讨论这个问题。

二、进程的描述和组织!!!

描述

进程的描述一般并不是单个数据能够描述清楚的,往往是一组数据。

在java中,我们可以用类/对象来描述这一组数据,C/C++中用的是结构体来描述的。他们都有一个共同的名字叫做进程控制块****,英文名字叫做process control block简称PCB。

而不管是结构体表示还是类/对象表示,它们的组成都是不变的,都必须包含以下四部分/具有以下四部分特征:

①进程的唯一标识——pid

②内存指针。注意这里的指针不是C/C++的指针,而是一个形象比喻,毕竟我们还有说java呢–它描述了进程关联的程序信息,例如那个程序加载到那个内存里去了。主要解决的就是内存分配的问题,比较重要!。

**③文件描述赋表。**也就是分配给这个资源使用的其他资源的信息。

④进程调度信息。主要解决的就是cpu资源的分配。非常重要!!因此,我们在下边专门开了一个小节讨论这部分内容。

PCB的这四个特性解决了OS操作中/资源分配中的进程标识、内存分配、CPU分配这三个主要问题。


我们在idea或者vs上边打印地址其实并不是真正的地址,有人说哈希出来的虚拟地址,这种说法对吗?我们在后边专门开了一个小节讨论这个问题。


组织

通过一定的数据结构来组织。这里采用的就是一个双向链表来把多个PCB给串到了一起。

大体认知

在基本了解了进程描述和组织之后,我们不难有这样的结论:

  • 创建一个进程,本质上就是创建一个PCB这样的(结构体)对象,把它给插入链表中。

  • 销毁一个进程,本质上就是把链表中的一个PCB对象给删除

  • 任务管理器查看到进程列表,本质上就是遍历这个PCB链表。

三、进程描述之进程调度/CPU分配详解!!!

首先说结论,OS对CPU资源的分配,采用的是时间模式,即不同进程在不同时间段去使用CPU资源。

既然要讨论CPU分配,我们首先需要对它有一个基本的了解吧。

1.什么是CPU?

CPU是一块超大规模热集成电路,是一台计算机的运算核心和控制中心。

2.CPU的分类

决定一棵CPU战斗力的要参数包括“三大两小”。三大:核心数/线程数、频率、架构;两小:缓存、工艺。

这里我们主要关注的是核心数/线程数。

我们经常看到类似于这样的术语“8核16线程”,它的含义就是一个CPU分成8个核心,每个核心又能一个顶俩(超线程技术)。我们可以把每个核心都视为一个独立的CPU。

这里我们注意要区分进程和线程的概念,由于篇幅原因,这里我将会在第6个小节中对它进行说明。这里我们只需要简单知道进程和线程是一对多的关系即可。

了解完cpu,我们现在再来思考一个问题,cpu的核心/线程数是有限的,而我们需要处理的数据是海量的,这样就无可避免的会造成一个问题,那就是进程/线程并发。而谈到并发我们又往往会联想到并行,所以,我们再来讨论一下cpu资源分配过程中的并发和并行问题。

先来说结论,我们是希望同时进行的,为的是效率更高一些,为此,前辈们提出了一个概念——分时并发,同时涉及到并行和并发。

注意:不管是并行还是并发,一个核心上只能执行一个进程。

并行,微观上来讲,就是同一时刻,两个核心上的进程时可以同时执行,宏观上也是同时执行的。【可以理解为平行关系,互不干扰完全没问题】

并发,微观上来讲,就是同一时刻,(一个核心的多个进程是不可以同时执行的,只是跟并行并发没关系),一个核心一次只能执行一个进程,但是他能通过对进程进行快速的切换,达到宏观上,同时执行的假象。

可以暂时这样理解:
并行讨论的是cpu的不同核心上的进程,并发讨论的是同一个核心上的不同进程。
对于宏观上同时执行的进程,是并行或者并发的关系。如果这两个进程是在同一个核心上,那么就是并发的关系;如果是在不同核心上,那么就是并行的关系。

因此,分时并发就可以解决数据量比较大的时候程序的运行问题,服务于很多的进程。另外,宏观而言,并行和并发我们并不能区分,因此很多时候我们把并行和并发统称为并发,如果不显式声明的话。

讨论完cpu和并行并发这些背景知识,我们来看进程到底是怎么调度的?

进程的调度通常是通过调度器完成的调度器有以下几种核心属性

  1. 进程的状态

    • 就绪状态:随叫随到,就成随时准备好了去cpu上执行
    • 运行状态:正在执行
    • 阻塞状态:短时间内无法响应……
    • ……(其他的了解/用到再查也可以,先掌握这些重要的)
  2. 优先级

    进程之间也是有优先级的,联想优先级队列

  3. 上下文

    情景:加到一半断电了。此时就需要有人/部件记录这个状态,在cpu中当一下子加载不完也是需要上下文这个功能。

    上下文本质上就是我们存档的内容。

    进程的上下文就是cpu中各个寄存器的值。(联想cpu的功能)

    保存这些上下文,就是把这些cpu寄存器的值,保存到内存中去。恢复上下文就是把这些cpu的值加载回去。

  4. 记账信息

    操作系统中,统计每个进程再cpu上占用的时间和指令的舒木木,根据这个决定来决定下一阶段如何调度。

    相当于一个会议记录,方便复盘。

四、进程描述之内存管理/内存分配!

首先说结论,OS对内存资源的分配,采用的是空间模式,即不同进程使用内存中的不同区域,互相不会干扰。

既然要讨论内存,我们首先需要对它有一个基本的了解吧。

1.什么是内存?

内存是内存器,一般表现形式有内存条等等。

2.内存功能

暂时存放 CPU 中的运算数据, 以及与硬盘等外部存储器 交换数据。

3.内存条简单介绍

虚拟地址与物理地址:

物理地址:真实的内存地址

虚拟地址:物理地址被操作系统转换后的地址

这么做的原因是:同一个进程不一定会被放在内存的同一个位置,而且不同的进程因为地址的不同,而且可能不连续,编写程序会变得很复杂。

虚拟地址是暂时承诺给你,等你需要(访问这段内存)的时候才会给你分配内存

五、进程之间通信

进程一多,无可避免的会带来一些问题,比如进程相互影响的问题。我们可以把它们全部隔离吗?不可靠,如果这些进程之间有相互依赖/配合的关系呢?需要他们进行相互配合。

这个时候我们就需要在隔离性的基础上“开个口子”,搞一个多个进程都能访问到的“公共空间”,基于这个公共空间来交互数据。

通信方式/公共空间有很多具体的体现形式,我们重点掌握两种**,基于文件和基于网络**即可。

六、相关拓展知识(了解即可)

进程和线程的区别

  1. 线程是依赖于进程存在的
  2. 进程和线程是一对多的关系
  3. 进程是os资源分配的基本单位,线程是cpu调度的基本单位

内存管理主要研究的问题

  1. 那些内存已经被分出去,那些还没有
  2. 已经分配出去的内存什么时候回收,怎么进行回收
  3. 物理地址到线性地址的转换。。。
  4. 内存碎片问题。。。

参考

CPU
OS

Java EE|软件视角下的操作系统相关推荐

  1. 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】

    一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...

  2. mic系统装java开发软件_Windows下安装MicMac

    MicMac是一个免费开源的摄影测量套件,可用于各种3D场景重建,可以用于各个领域:制图,环境,工业,林业,遗产,考古学,...... 1 下载程序文件 2 安装 解压缩要安装的 "*.zi ...

  3. 在java EE版本eclipse下如何查看tomcat部署的位置 。版权声明:本文为博主原创文章,未经博主允许不得转载。...

    转载于:https://www.cnblogs.com/yangmingfeng/p/5148465.html

  4. java教务系统类设计_基于Java EE体系的高校教务管理系统的设计开发

    <基于Java EE体系的高校教务管理系统的设计开发>由会员分享,可在线阅读,更多相关<基于Java EE体系的高校教务管理系统的设计开发(3页珍藏版)>请在人人文库网上搜索. ...

  5. Java EE与Java SE:Oracle是否放弃了企业软件?

    Java Enterprise Edition是全球Java社区中最大的困惑来源之一. 就像<星球大战>和<星际迷航 >之间的区别一样,对于"原力觉醒"是他 ...

  6. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  7. 技术-经济范式视角下的开源软件演进剖析(五)

    点击上方"开源社"关注我们 | 编辑:杨紫琳 | 作者:刘博 | 转载自:华为开发者社区 | 设计:李静雯 如何破解网络外部性 以开源软件为代表的知识.信息经济下垄断与" ...

  8. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  9. JAVA EE Eclipse下配置Tomcat服务器

    在进行Java web编程之前,必须要进行web服务器的配置,这里选择在Java EE(版本) Eclipse中进行服务器的配置.当然了,在安装Java EE Eclipse之前要先安装JDK,并且要 ...

最新文章

  1. mysql5.7 temp_MySQL5.7-学习笔记(kylix)-2019.3.29-tempundo
  2. cannot use throw with exceptions disabled
  3. c语言变量为什么要定义,C语言为什么要规定对所用到的变量要“先定义,后使用”...
  4. ios django 连接mysql_Django---Django连接Mysql数据库
  5. Oracle递归查询示例分析
  6. html页面 sql注入,使用html仅阻止SQL注入
  7. 典型测试错误(英中文对照)
  8. [物理学与PDEs]第5章习题6 各向同性材料时强椭圆性条件的等价条件
  9. bzoj2002:[Hnoi2010]Bounce 弹飞绵羊
  10. 判断一个对象是否存在
  11. 二叉搜索树的后序遍历序列验证
  12. PMP考试的难度怎么样?
  13. 项目管理手记(八) SaaS模式的DRP系统是否适用?
  14. 互联网未来十年发展趋势
  15. 30岁学前端晚不晚?别被年龄定义你的人生!
  16. 阿里20周年升级价值观:新六脉神剑与它的变革时代
  17. Spring框架总结(8)
  18. android 控件阴影
  19. 『Linux』CentOS 7下一些有趣的配置
  20. JAVA学习日记DAY14-15--javascript

热门文章

  1. 实用网站推荐(1):胡萝卜周博客
  2. Egret Touch事件
  3. 新年贺词新年祝福短信
  4. 计蒜客 - 法师康的工人
  5. 拦截器的编写(十一)
  6. Canvas 橡皮擦效果
  7. 基于java的中小型超市销售管理系统
  8. NBA网商平台管理系统
  9. python调用libpcap_libPcap(基于C)接受基于Python的Socket程序 - python
  10. Sicily 1750 运动会