-
2.1内存储器(简称内存)
-
2.2外存储器(简称外存) 如:硬盘,光盘,U盘软盘……
3.输入设备 如:键盘,鼠标,麦克风……
4.输出设备 如:显示器,音箱,打印机……
注意:有的设备即是输入设备又是输出设备 如:手机的触摸屏(即能点击又能显示出画面),网卡(即能从网上下载数据,又能上传数据到网上)
举一个例子来说明这些硬件之间是如何配合的(数据不是简单的发送和接收,它的内部是十分复杂的)
例如:A在电脑上从QQ上发送一句“hello ”到B的电脑上
======================================================================
1.概念:操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面
2.内核
内核是一个操作系统的核心,主要功能为直接与硬件通信(靠各硬件对应的驱动程序)然后提供一个抽象的接口给应用程序,为应用程序提供一个运行环境并分配程序运行必须的cpu和内存资源
3.操作系统(内核)
1.管理计算机所有的硬件设备
2.管理计算机中的软件资源
4.那么是如何进行管理的呢?(先描述再组织)
4.1.描述:管理一个硬件的时候,都会通过一个类(也可能是一个结构体)来描述这个硬件的所有信息,目前的windows、Linux、mac都是用C语言实现的,那么C语言是里面是使用struct结构体来描述硬件设备和软件资源的
4.2.组织:通过一定的数据结构实现,目的是为了方便进行“增删改查”
了解到一定的操作系统,下面来认识进程和线程
=========================================================================
前面我们提到操作系统是管理硬件设备和软件资源,而进程就是操作系统需要管理的软件资源的一部分
我们无时无刻都在跟进程打交道,如:打开我们的任务管理器,我们就可以看到很多的进程
一个所谓的“程序”一般只一个可执行的文件(如“.exe”文件),如果不双击.exe文件的时候,那么他此时就是一个文件默默的在磁盘(外存)上,如果双击这个文件的时候,操作系统就会把这个exe文件从磁盘加载到内存中,并且CPU开始执行这个程序中的代码,此时执行这个代码的过程就称为“进程process”。(有些操作系统中也管进程叫做“任务task”)
如我们找到qq所在的.exe文件,然后双击,在打开我们的任务管理器我们就可以看到qq已经在运行了
对于现代的操作系统来说,同一时刻,运行着很多的进程,那么
1.描述: 每个进程都会创建一个结构体(对象),称为“进程控制块(PCB)”
2.组织: 内核中使用一个双向链表,把所有的PCB对象串到一起
例如:
a)任务管理器如何显示所有的进程信息呢?
遍历内核中的链表,取出每个PCB对象,在打印这个对象的属性就可
b)当创建新的进程的时候,本质上就是创建了一个PCB对象,然后将这个对象加到链表中
c)当销毁已有进程的时候,本质上就是把该进程对应的PCB对象从链表中删除掉了
3.一个进程包含哪些内容(PCB中有什么)
3.1进程持有了一些操作系统的资源
a)CPU资源(进程中的代码需要在CPU上执行)
b) 内存资源(每个进程都会消耗一定的内存)
c)占据磁盘IO(持有一些文件资源,因为进程可能会在的磁盘上读取数据)
d)占据网络IO(通过网卡来上传/下载一定的数据)
进程 也可以视为是操作系统进行资源分配的基本单位
4.进程的PCB中还有一些其他属性
例如
a)进程id:进程的唯一身份表示,类似你的身份证号码
b)进程的状态
c)进程的优先级
d)进程的上下文信息
e)进程的记账信息
进程的调度,具体是由操作系统内核中的调度器模块实现的,这里的调度顺序是有一定的规则,但是这个规则比较复杂,当程序员在应用层写代码的时候,是无法预测该进程何时被调度走,下一个进程何时被调度进来的,实现的是“抢占式”策略。
5.时间片
(1)现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。所谓的多任务,就是操作系统可以同时运行多个任务。
(2)操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行
(3)任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。
这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。
6.并发和并行
- 并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
(微观上一个个执行,宏观上同时进行)
- 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。
(微观上就是同时进行)
并发和并行的目的只有一个:提高程序效率
7.线程
7.1线程和进程的关系
如果进程是一个个工厂,那么线程就是工厂里面的一条条流水线
一个进程中可能包含着很多的线程
a)一个进程中可能包含着很多的线程
b)每个线程都有自己要执行的逻辑(相关代码)
c)一个进程中可以同时有多个这样的要执行的逻辑,然后让这些逻辑并发是的执行
d)线程和线程之间,很多资源是共享的,共享的目的是为了编程方便,更方便的实现一些并发任务,而且当一个线程出现bug的时候,只会当前线程所在的进程会被终止,而不会影响到其他进程。如:内存和管理的文件
e)进程和进程之间,资源是相互独立的,为了保证目的的稳定性,不要因为一个进程出现bug而导致所有的进程被终止
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!