OS | 4 抽象:进程

news2025/1/16 16:41:15

OS | 4 抽象:进程

文章目录

  • OS | 4 抽象:进程
    • CPU虚拟化的方法
    • 进程:是一种抽象
        • 非正式定义
      • 进程的机器状态
    • 进程API
    • 程序转换为进程的过程
      • 进程状态
      • >>>>> 欢迎关注公众号【三戒纪元】 <<<<<

CPU虚拟化的方法

操作系统通过虚拟化(virtualizing)CPU来提供这种现象:通过让1个进程只运行1个时间片,然后切换到其他进程,操作系统系统了存在多个CPU的假象。

实现CPU虚拟化,现代操作系统都采用时分共享机制

时分共享(time sharing):通过允许资源由一个实体使用一小段时间,然后由另一个实体使用一小段时间,如此下去,资源(CPU或网络连接)可以被许多人共享。

时分共享对应技术是空分共享

空分共享:资源在空间上被划分给希望使用它的人。例如磁盘空间就是一个空分共享资源。

进程:是一种抽象

非正式定义

进程就是运行中的程序。

程序本身没有生命周期的,它只是存在磁盘上的一些指令(也可能是一些静态数据)。

是操作系统让这些字节运行起来,让程序发挥作用

所以“字节跳动”就是一个进程?!

操作系统为正在运行的程序提供的抽象,就是所谓的进程(progress)。

在任何时刻,我们都可以清点程序在执行过程中访问或影响的系统的不同部分,从而概括一个进程。

进程的机器状态

  1. 内存

    指令存在内存中,正在运行的程序读取和写入的数据也在内存中。因此进程可以访问的内存(地址空间)是该进程的一部分;

  2. 寄存器

    程序计数器(Program Counter, PC)指示程序即将执行哪个命令;

    栈指针(stack pointer)和相关的帧指针(frame pointer), 用于管理函数参数栈、局部变量和返回地址。

进程API

操作系统提供API的形式

  • 创建 create:操作系统必须包含一些创建新进程的方法
  • 销毁 destroy:由于存在创建进程的接口,因此系统还提供了一个强制销毁进程的接口。当然,很多进程会在运行完成后自动退出。
  • 等待 wait:有时等待线程停止运行是有用的,因此经常提供某种等待接口
  • 其他控制 miscellaneous control:除了扇死或等待进程外,有时还可能有其他控制。例如暂停进程,然后恢复(继续运行)
  • 状态 status:可以获取进程有关的状态信息的接口,例如运行了多长时间,或者处于什么状态

程序转换为进程的过程

  1. 将代码和所有静态数据(例如初始化变量)加载到内存中,加载到进程的地址空间中

    程序最初以某种可执行格式驻留在磁盘上。

    操作系统需要从磁盘读取这些字节,并将它们放在内存中的某处。

    现代操作系统惰性(lazily)执行该过程,即仅在程序执行期间需要加载的代码或数据片段,才会加载。想真正理解惰性加载,必须充分了解分页交换的机制。

加载:从程序到进程

  1. 为程序的运行时栈(run-time stack 或 tack)分配一些内存

    栈用来存放局部变量、函数参数和返回地址。

    操作系统分配内存,并提供给进程。

    操作系统可能也会用参数初始化栈。例如会将参数填入 main(int argc, char** argv)函数

  2. 操作系统可能为程序的堆(heap)分配一些内存

    堆用于显式请求动态分配数据,通过调用 malloc()请求空间,并通过调用free()明确释放堆

    数据结构(如链表散列表和其他有趣的数据结构)需要堆

  3. 操作系统还将执行一些其他初始化任务,特别是与输入/输出(I/O)相关的任务

    例如,在UNIX系统中,默认情况下每个进程都有3个打开的文件描述符(file descriptor),用于标准输入输出错误

通过将代码和静态数据加载到内存,通过创建和初始化栈以及执行与I/O 设置相关的奇台工作,操作系统开始启动程序,在入口处运行,一般是main() 函数。

通过跳转到 main() 例程,OS将CPU的控制权转移到新创建的进程中,从而程序开始执行。

进程状态

进程可以出在以下3种状态之一

  • 运行(running)

    在运行状态下,进程正在处理器上运行。意味着它正在执行指令

  • 就绪(ready)

    进程已经准备好运行,由于某种原因,操作系统选择不在此时运行

  • 阻塞(blocked)

    一个进程执行了某种操作,进入阻塞状态,直到发生其他事件时才会准备运行。
    进程:状态转换


>>>>> 欢迎关注公众号【三戒纪元】 <<<<<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式调度Elastic-job

分布式调度Elastic-job 1. 概述 1.1什么是任务调度 我们可以思考⼀下下⾯业务场景的解决⽅案: 某电商平台需要每天上午10点&#xff0c;下午3点&#xff0c;晚上8点发放⼀批优惠券某银⾏系统需要在信⽤卡到期还款⽇的前三天进⾏短信提醒某财务系统需要在每天凌晨0:10分结算前…

进程控制相关 API-创建进程、进程分离、进程退出、进程阻塞

进程控制相关 API p.s 进程控制中的状态转换 相关 API&#xff0c;用户很少用到&#xff0c;在此不提。 一般来说&#xff0c;这些内核标准 API&#xff0c;在执行出错&#xff08;可能是资源不够、权限不够等等&#xff09;会返回负值&#xff08;比如 -1&#xff09;&#…

Go实现LogAgent:海量日志收集系统【上篇——LogAgent实现】

Go实现LogAgent 项目架构图&#xff1a; 0 项目背景与方案选择 背景 当公司发展的越来越大&#xff0c;业务越来越复杂时&#xff0c;每个业务系统都有自己的日志。此时我们就应该将不同业务线的日志进行实时收集&#xff0c;存储到一个日志收集中心&#xff0c;最后再通过…

手写Mybatis:第7章-SQL执行器的定义和实现

文章目录 一、目标&#xff1a;SQL执行的定义和实现二、设计&#xff1a;SQL执行的定义和实现三、实现&#xff1a;SQL执行的定义和实现3.1 工程结构3.2 SQL执行实现的关系图3.3 执行器的定义和实现3.3.1 Executor 接口3.3.2 BaseExecutor 抽象基类3.3.3 SimpleExecutor 简单执…

编译工具:CMake(六) | 使用外部共享库和头文件

编译工具&#xff1a;CMake&#xff08;六&#xff09; | 使用外部共享库和头文件 步骤引入头文件搜索路径为 target 添加共享库 步骤 在/Compilation_tool/cmake 目录建立 t4 目录 建立src目录&#xff0c;编写源文件main.c&#xff0c;内容如下&#xff1a; #include <…

ModaHub魔搭社区——决胜大模型时代,算力、网络、向量数据库缺一不可

大模型应用场景日趋多样,需求也随着增加,进而倒逼着多元算力方面的创新,为满足AI工作负载的需求,采用GPU、FPGA、ASIC等加速卡的服务器越来越多。 根据IDC数据统计,2022年,中国加速服务器市场相比2019年增长44.0亿美元,服务器市场增量的一半更是来自加速服务器。 这意味…

shell bash中设置命令set

1 Preface/Foreword set命令用于shell脚本在执行命令时候&#xff0c;遇到异常的处理机制。 2 Usage 2.1 set -e 当执行命令过程中遇到异常&#xff0c;那么就退出脚本&#xff0c;不会往下执行其它命令。 #!/bin/bash #set -eroot GIT_TAG${CI_BUILD_TAG-NOTAG} GIT_REV…

MySQL创建用户时报错“Your password does not satisfy the current policy requirements“

MySQL创建用户时报错"Your password does not satisfy the current policy requirements" MySQL是一个流行的关系型数据库管理系统&#xff0c;它提供了许多安全性特性&#xff0c;其中之一是密码策略。在创建或更改用户密码时&#xff0c;MySQL会检查密码是否符合当…

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉农大图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉农大图书馆

HCIP---BGP协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 根据AS自治系统可以将动态路由协议划分为IGP和EGP协议。IGP协议是应用在AS内部&#…

手摸手2-springboot编写基础的增删改查

目录 手摸手2-springboot编写基础的增删改查创建controller层添加service层接口service层实现添加mapper层mapper层对应的sql添加扫描注解,对应sql文件的目录 手摸手2-springboot编写基础的增删改查 创建controller层 实现 test 表中的添加、修改、删除及列表查询接口&#x…

PHP8函数包含文件-PHP8知识详解

在php中&#xff0c;可以使用以下函数来包含其他文件&#xff1a;include()、include_once()、require()、require_once()。 1、include(): 包含并运行指定文件中的代码。如果文件不存在或包含过程中出现错误&#xff0c;将发出警告。 <?php include filename.php; ?>…

【前端demo】背景渐变动画

文章目录 效果过程代码htmlcss 其他demo 效果 效果预览&#xff1a;https://codepen.io/karshey/pen/OJrXZwQ 过程 注意&#xff0c;直接在body上加height:100%可能也会出现height为0的情况&#xff0c;这是需要令html的height:100% 代码 html <!DOCTYPE html> <…

面试题--从键盘输入网站到网页显示,之间发生了什么

文章目录 首先进入HTTP阶段协议栈阶段TCP阶段IP阶段MAC网卡交换机路由器抵达 首先进入HTTP阶段 1.解析对应的URL&#xff0c;访问一个对应的服务器xxx.com的一个文件index.html; 2 使用DNS查询对应的ip地址&#xff0c;通过DNS服务器进行查找 3 组装http报文&#xff0c;生成h…

成集云 | 多维表自动查询快递100信息 | 解决方案

源系统成集云目标系统 方案介绍 产品详情 维格表是一种新一代的团队数据协作和项目管理工具&#xff0c;它结合了可视化数据库、电子表格、实时网络协同、低代码开发技术四项功能&#xff0c;且支持API与可视化看板&#xff0c;操作简单&#xff0c;能提升中小企业的数字化生…

python网络编程

文章目录 socket套接字客户端/服务模型linux文件描述符fdLinux网络IO模型详解网络服务器Apache VS Nginx生产者消费者-生成器版客户端/服务端-多线程版IO多路复用TCPServer模型异步IO多路复用TCPServer模型 socket套接字 套接字&#xff08;socket&#xff09;是抽象概念,表示T…

【数据分享】1901-2022年1km分辨率的逐月降水栅格数据(免费获取/全国/分省)

气象指标在日常研究中非常常用&#xff0c;之前我们给大家分享过来源于国家青藏高原科学数据中心提供的气象指标栅格数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff1a; 1901-2022年1km分辨率逐月平均气温栅格数据1901-2022年1km分辨率逐年平均气温栅格数据…

wsl中使用宝塔每次都要绑定账号问题解决

环境&#xff1a;windows11、wsl2、Ubuntu20.04、宝塔8.0.24 1、开启Hyper-V&#xff0c;如果是家庭版使用下面代码启用Hyper-V&#xff0c;创建个.cmd文件保存后使用管理员权限运行&#xff08;需要重启电脑&#xff09; pushd "%~dp0" dir /b %SystemRoot%\servi…

QT6配置Android环境的多次尝试

可能用到的链接&#xff1a;https://www.androiddevtools.cn/#&#xff08;Android开发工具&#xff09; https://developer.android.google.cn/studio&#xff08;Android studio 下载&#xff09; https://www.oracle.com/java/technologies/downloads&#xff08;java下载&a…

【pyinstaller 怎么打包python,打包后程序闪退 不打日志 找不到自建模块等问题的踩坑解决】

程序打包踩坑解决的所有问题 问题1 多个目录怎么打包 不管你包含多个层目录&#xff0c;引用多么复杂&#xff0c;只需要打包主程序所在文件即可&#xff0c;pyinstaller会自动寻找依赖包&#xff0c;如果报错自建模块找不到&#xff0c;参照问题3 pyinstaller main.py问题2…