针对java程序员的了解细节操作系统与进程

简介: 针对java程序员的了解细节操作系统与进程

一、💛

操作系统(浅浅概念):是用来搞管理软件的

                                          1.对下,要管理各种硬件设备

                                          2.对上,要给应用程序提供一个稳定的运行环境

二、💙

进程正在运行的程序,假如程序没有运行就不叫程序,同一个程序运行多次,假如你开了三个QQ,那也就是产生了三个进程。

我们说的程序往往是可执行文件(exe)只是硬盘中的一个静态的东西(只有你双击程序,此时操作系统,就会把可执行文件的数据和指令,加载到内存中,并且让cpu去执行这里的指令,完成一系列相关工作,运行起来(动态的)进程。

进程能够干活,说明进程能够消耗一定的资源,可执行程序只是占据了硬盘空间,而进程会消耗cpu资源,内存资源,硬盘,网路带宽。

🌚这里我就要说一手,常常兄弟们会想一个问题,我假如下那种小电影软件 🌚,但是不安装就是玩,会不会有病毒啥的,只要他不成为进程,就没有任何问题。

♓️ 进程也是系统分配硬件资源的基本单位(如同发物资,按着一家一户这么发)

一台运行的计算机,大概率包含很多进程,一旦东西多了,就要考虑管理

在数量多的情况下:1.先描述:会使用一个结构体(C语言里面的,如同java中低配的类,没有方法啥的,操作系统主要是c/c++来实现)来记录进程里面的各个属性

这个结构体叫做PCB<-(进程控制块)💖 💖 💖

                                   2.组织:会使用一系列数据结构(多为双向链表),把多个进程进行一个有效的组织,随时去遍历,查找,汇总数据  

一旦使用双向链表这样的方式来进行组织的时候:

(a)查看进程的链表本质就是遍历该链表

(b)创建一个进程,就是创建一个PCB结构体,并且插入到链表上。

(c)销毁一个进程,就是把这个PCB结构体从链表中删除。

三、💚

PCB中大概有哪些消息:

1.♈️PID进程的标识,同一时刻,每个进程的PID一定都是不同的(正是我们之前在MySQL使用中遇到的没有PID的文件。

2.♉️内存指针:

  表示了该进程,对应的内存资源是如何的

  内存资源中要有什么捏?-最主要存储的就是从exe可执行文件中可载过来的指令数据

指令:二进制的指令,都是程序猿开发这个程序的时候,最终编译生成的结果,也就是程序猿写的代码逻辑(进一步的再去交给cpu执行)

数据:执行的这些指令,会依赖一些数据

3.♊️文件描述表:

和硬盘资源有关了,硬盘是硬件,应用程序一般没法直接接触到硬件层 ,实际操作系统抽象成文件这样的概念,程序操作的是文件,文件实际上是存储在硬盘上的,每个进程就会有一个文件描述符来记录,当前这个进程正在使用哪些文件

也就是说 程序->文件->硬盘

操作系统打开一个文件,就会产生一个文件描述符(就像文件的身份标识一样,当然只在进程内部生效啦,)同时会使用文件描述表(类似于数组),把文件描述符组织起来。

补充:进程需要在cpu上执行指令,每个进程要是想完成任务,都要在cpu上一样执行

把进程比喻成演员,那么cpu就是表演场地,早期的cpu只有一个舞台,一个时间上只允许一个剧组在上面拍戏。

但是现在cpu 8核 16核···但是我们要处理的事务几十个,上百个

♐️并行:同一时刻两个进程,同时运行在两个cpu的逻辑核心上

♒️并发:两个进程,在同一个舞台上,轮着上,由于cpu切换进程极快,围观上,这俩进程串行执行的,宏观上,看起来,他俩就是同时进行的~

操作系统,在调度这些进程的时候,可能是按照并行的方式来调度,也可能是按照并发的方式来调度,~在应用程序这一层,感知不到的! (系统中内核能感知到)

由于感知不到哪种方式调度,这两种调度方式,宏观上体现效果都是一样的,通常用并发代替并发和并行(面试官说啥是啥,舔就完事了)

4. ♋️PCB中关于进程调度相关的属性(这些属性也就描述了进程对应的cpu资源使用情况)

(1)♌️状态  就绪状态—— 一个进程已经随时做好在cpu上执行的准备,)

                   阻塞状态/睡眠状态: 因为某些原因无法准备中。

状态之间都是相互转化的,实际上进程的状态有很多种,但是这两种事最重要的。

(2)♍️优先级

系统给进程进行调度的时候,也不完全是公平的,也会根据优先级不同,来决定时间分配的权衡,就可以把系统资源调配给更重要的进程上了。(例子:有钱>帅>舔)

(3)♎️ 上下文

这些进程是轮着上的,一次运行不完,就需要保证下次cpu运行的时候,能够从上次运行到的位置,继续往后运行。(游戏存档,读档)

(4)♏️记账信息:相当于统计信息

 会统计每个进程,在cpu上执行了多久,执行了多少指令了,是对于进程调度的一个兜底。

上述这些属性,主要是有一个直观认识->认识进程调度大概是怎样的,后续编码有一定影响,每个进程,都需要一定的内存资源。


 

 

按照上述直接分配物理内存的模型,此时假如一个指针越界指向其他位置,很可能会影响别的进程的执行,非常影响系统的稳定性。

后来操作系统引入了“虚拟地址空间”这样的概念,有效解决上述的问题

⛎ 虚拟地址,并非物理内存中真实存在的地址,而只是在该进程内存在不同的进程,可以存相同的虚拟地址,但实际上对应得到的是不同的物理地址,虚拟地址和物理地址,操作系统可以灵活切换

 

🔯这样的设定之后,每个进程的有效的虚拟地址都是固定范围,进程使用虚拟地址的内存,都需要操作系统进行转换成物理地址,这个转换的过程中,就可以针对虚拟地址是否有效,做出校验

虚拟地址,和物理地址的区别就像是

1班有王强

2班有王强,区分这两个王强,要是区分就要看,年纪花名册(物理地址呗)

虚拟空间的加持下,进程有了独立性,每个进程有自己的虚拟空间->一个进程无法直接访问,或者修改其他进程,虚拟空间,独化了系统的独立性,

假如也要进程之间产生写配合,联系

进程间通信(进程隔离性的基础上,开个口子有限制的相互影响),在进程隔离之间开个口,本质相同,找一个公共区域(就像是做小区核酸,)借助公共区域来完成数据的交换

(以后介绍,本章先到这里)

最近会更新一些基本的知识,和算法,打算冲一下蓝桥杯加油啦


相关文章
|
2天前
|
IDE Java 程序员
JAVA注解大揭秘:为何程序员都爱它如命?
【6月更文挑战第29天】Java注解是元数据机制,用于在代码中嵌入信息供编译器、IDE和工具使用。它们以`@`标识,可用于类、方法等,用于编译时检查、代码生成(如Lombok的`@Getter`、`@Setter`)、框架集成(如Spring的`@Autowired`)。程序员喜欢注解因其简洁性、可读性和可扩展性,能减少冗余代码并增强代码的可理解性。
22 15
|
3天前
|
JSON Java fastjson
老程序员分享:java对象转json
老程序员分享:java对象转json
10 3
|
3天前
|
机器学习/深度学习 Java 关系型数据库
程序员必知:关于高淇JAVA中SORM总结学习笔记详细个人解释
程序员必知:关于高淇JAVA中SORM总结学习笔记详细个人解释
|
3天前
|
算法 Java 程序员
老程序员分享:Java开源
老程序员分享:Java开源
|
3天前
|
机器学习/深度学习 Java 关系型数据库
程序员必知:关于高淇JAVA中SORM总结学习笔记详细个人解释
程序员必知:关于高淇JAVA中SORM总结学习笔记详细个人解释
|
3天前
|
存储 Java 程序员
老程序员分享:Java虚拟机详解(九)
老程序员分享:Java虚拟机详解(九)
|
3天前
|
Java 程序员 容器
老程序员分享:java容器体系(三)
老程序员分享:java容器体系(三)
|
安全 Java 调度
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(上)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(上)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(上)
|
消息中间件 Java
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(下)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(下)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(下)
|
3天前
|
安全 算法 Java
java多线程面试题2019整理
java多线程面试题2019整理

热门文章

最新文章