当前位置: 首页 > news >正文

初识操作系统

💓 博客主页:小夏的编程之路的博客

⏩ 收录专栏:操作系统的认识

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

一.操作系统的认识        

        1:常见的操作系统有

        2:操作系统以进程操作系统由三个基本功能

二:进程(Process)

        1:什么是进程/任务(Process/Task)

        2:进程的定义

        3:进程主要包含了六大板块

三:线程(Thread)

        1:认识线程(Thread)

四:进程与线程的区别

在这里插入图片描述

一.操作系统的认识

1:常见的操作系统有

操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix系
列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。

  • Windows是常见的个人电脑操作系统;
  • Linux是常见的服务器上运行的操作系统;
  • Android是常见的手机上运行的操作系统;

 操作系统的定位

简单来说,操作系统是管理各种硬件设备所提供的api接口进行封装,将其包装成一个软件,方便程序员在代码实现中直接进行调用而省去了一步步去连接硬件接口的复杂工作,例如:JAVA中的JDK便是对硬件接口封装的一种形式.

2:操作系统以进程操作系统由三个基本功能

1)防⽌硬件被时空的应⽤程序滥⽤;
2)向应⽤程序提供简单⼀致的机制来控制复杂⽽⼜通常⼤相径庭的低级硬件设备
3)以及一些系统的调度任务(以下两点):

  • 进程调度:操作系统以进程的方式维护运行中的程序,并通过PCB中的一些属性(比如:优先级,记账信息,状态等)完成对进程的调度;
  • 资源分配:应用程序在运行时向操作系统申请各种资源,其中就包括内存,所有内存管理也是操作系统的重要工作之一;组织文件管理系统:了解一下操作系统的定位,操作系统是计算机的最高管理者,管理所有的计算机资源,包括文件系统,协调硬件工作;

二:进程(Process)

1:什么是进程/任务(Process/Task)

每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运
⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可
以说是计算机科学中最重要和最成功的概念之⼀。

2:进程的定义

是操作系统进行资源分配的最小单位。一个进程是一个程序的一次执行过程。每启动一个进程,操作系统就会为它分配一块独立的内存空间,用于存储PCB、数据段、程序段等资源。每个进程占有一块独立的内存空间

3:进程主要包含了六大板块

1).PID进程标识符(每一个进程都有自己的编号,系统通过编号来调度进程和销毁进程);

2):内存指针(主要是标识了哪些内存是该进程可以使用的空间);

3):文件描述符(进程使用的硬件的相关信息,将硬件设备封装成文件进行调用,并且在文件描述符表中分配一个表项,也就是一个PCB,来描述这个文件对系统资源的使用情况);

PCB:底层代码类似于C语言中的结构体,其中包含了很多关于一个进程的信息 ,也叫进程控制块,如:内存的使用情况,CPU的占比.......

4):状态

  • 就绪状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态
  • 阻碍状态: 正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

5):优先级:多个进程等待系统的随机调度,根据哪个进程的优先级高则优先调用那个进程

6):记账信息:根据每个进程调用CPU的多少时间,进行一个统计,会根据这个统计来进一步调整调度的策略.

三:线程(Thread)

1:认识线程(Thread)

线程是什么:⼀个线程就是⼀个"执⾏流".每个线程之间都可以按照顺序执⾏⾃⼰的代码.多个线程之间"同时"执⾏着多份代码

2:为啥要有线程
⾸先,"并发编程"成为"刚需".
• 单核CPU的发展遇到了瓶颈.要想提⾼算⼒,就需要多核CPU.⽽并发编程能更充分利⽤多核CPU
资源.
• 有些任务场景需要"等待IO",为了让等待IO的时间能够去做⼀些其他的⼯作,也需要⽤到并发编程.
比特就业课
其次,虽然多进程也能实现并发编程,但是线程⽐进程更轻量.
• 创建线程⽐创建进程更快.
• 销毁线程⽐销毁进程更快.
• 调度线程⽐调度进程更快.

最后,线程虽然⽐进程轻量,但是⼈们还不满⾜,于是⼜有了"线程池"(ThreadPool)和"协程"
(Coroutine)

3:创建线程

感受多线程程序和普通程序的区别:
• 每个线程都是⼀个独⽴的执⾏流
• 多个线程之间是并发执⾏的,代码如下:

import java.util.Random;
public class Solution {private static class MyThread extends Thread {@Overridepublic void run() {Random random = new Random();while (true) {// 打印线程名称System.out.println(Thread.currentThread().getName());try {// 随机停⽌运⾏ 0-9 秒Thread.sleep(random.nextInt(10));} catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {MyThread t1 = new MyThread();t1.start();Random random = new Random();while (true) {// 打印线程名称System.out.println(Thread.currentThread().getName());try {Thread.sleep(random.nextInt(10));} catch (InterruptedException e) {// 随机停⽌运⾏ 0-9 秒e.printStackTrace();}}}
}

代码运行结果如下:

使⽤ jconsole 命令观察线程:


四:进程与线程的区别

1):进程是包含线程的.每个进程⾄少有⼀个线程存在,即主线程

2):进程和进程之间不共享内存空间.同⼀个进程的线程之间共享同⼀个内存空间

3):进程是系统分配资源的最⼩单位,线程是系统调度的最⼩单位

4):⼀个进程挂了⼀般不会影响到其他进程.但是⼀个线程挂了,可能把同进程内的其他线程⼀起带⾛(整个进程崩溃).

如果觉得文章不错,期待你的一键三连哦,你个鼓励是我创作的动力之源,让我们一起加油,顶峰相见!!!💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓

相关文章:

  • 九、hdfs中Namenode元数据处理
  • SDN核心技术与内容
  • 34970A 数据采集 / 数据记录仪开关单元
  • 黑马点评笔记 redis缓存三大问题解决
  • 【深度学习】神经网络训练过程中不收敛或者训练失败的原因
  • 【实战详解】如何快速搭建接口自动化测试框架?Python + Requests
  • Verilator 用法
  • 轻量封装WebGPU渲染系统示例<39>- emissive和arm纹理支持(源码)
  • 智能优化算法应用:基于水循环算法无线传感器网络(WSN)覆盖优化 - 附代码
  • 编译器设计02-前端概述
  • Android JNI 异常定位(2)—— addr2line
  • springboot 使用脚本进行启动部署
  • 7-2 输出大写英文字母
  • 园区智能配电系统(电力智能监控系统)
  • 算法基础之KMP算法
  • [LeetCode] Wiggle Sort
  • [译]前端离线指南(上)
  • 【391天】每日项目总结系列128(2018.03.03)
  • 0x05 Python数据分析,Anaconda八斩刀
  • CentOS 7 修改主机名
  • Java编程基础24——递归练习
  • java第三方包学习之lombok
  • Java-详解HashMap
  • Python_网络编程
  • python大佬养成计划----difflib模块
  • react 代码优化(一) ——事件处理
  • React16时代,该用什么姿势写 React ?
  • spark本地环境的搭建到运行第一个spark程序
  • uva 10370 Above Average
  • 半理解系列--Promise的进化史
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 如何解决微信端直接跳WAP端
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 优秀架构师必须掌握的架构思维
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​MySQL主从复制一致性检测
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #每天一道面试题# 什么是MySQL的回表查询
  • (5)STL算法之复制
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)插入排序
  • (转)平衡树
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core 中间件验签
  • .NET Micro Framework初体验
  • .NET 设计模式—适配器模式(Adapter Pattern)