操作系统系列(二)——进程

2023-11-18

往期地址:

本期主题:
操作系统进程


1.异常

1.前言——异常控制流是什么?

从处理器上电开始,开始运行指令,指令的运行序列被称为处理器的控制流(flow of control),现代操作系统通过使控制流发生突变来面对一些异常的情况,这些就被称为异常控制流(Exceptional Control Flow,ECF)

2.异常的处理过程

异常是我们前面提到的异常控制流中的一种,它的处理过程是:
当处理器检测到有事情发生时,就会通过异常表,跳到一个专门用来设计处理这些异常的程序中,称为异常处理程序(exception handler)

3.异常的分类

异常可以做如下分类:

类别 原因 异步/同步 返回行为
中断 来自设备的I/O信号 异步 返回到下一条指令继续执行
陷阱(也不知道为啥叫这么奇怪的名字) 系统调用,有意的异常 同步 返回到下一条指令继续执行
故障 潜在的可恢复的错误 同步 可能返回到当前指令重新执行,也可能直接终止
终止 不可恢复的错误 同步 不会返回,直接终止

4.异常和进程的关系

正是有了异常这种可以打断处理器的操作,才有了进程的诞生。因为进程有两个关键意义

  • 一个独立的逻辑控制流,看起来能够让程序独占处理器;
  • 一个私有的地址空间,看起来让程序独占使用内存系统;

2.进程

1.进程的概念

一个执行中程序的实例就是进程。

2.进程所做的事情(意义)

前面已经说到,进程有两个关键意义:独立和逻辑控制流和私有的地址空间,那它是怎么做到这些事情的呢?

1.逻辑控制流

即使在系统中运行了许多程序,进程会向每个进程提供一个假象,就是它正在独占使用处理器,以一个运行着三个进程的系统为例:
在这个例子中,三个逻辑流的执行是交错的,先运行了一会进程A,然后运行进程B到完成,然后运行了一会C,然后A进程又开始运行了…
关键点在于他们是轮流使用处理器的,没在运行的时候进程就被暂时的挂起。
在这里插入图片描述

2.私有地址空间

系统中的每个进程都有自己的私有地址空间,排布如下:
在这里插入图片描述

以32位操作系统为例,从0xc000000000到0xFFFFFFFF共1G的大小是内核地址空间(后面再探讨内核地址空间,先重点关注用户地址空间),余下的低地址3G空间则是用户地址空间。
各个段的部分的介绍:

  • Code VMA: 即程序的代码段,CPU执行的机器指令部分。通常,这一段是可以共享的,即多线程共享进程的代码段。并且,此段是只读的,不能修改。
  • Data VMA: 即程序的数据段,包含ELF文件在中的data段和bss段。
  • 堆和栈: 这两个大家都十分熟悉了,new或者malloc分配的空间在堆上,需要程序猿维护,若没有主动释放堆上的空间,进程运行结束后会被释放。栈上的是函数栈临时的变量,还有程序的局部变量,自动释放。
  • 共享库和mmap内容映射区:位于栈和堆之间,例如程序使用的printf,函数共享库printf.o固定在某个物理内存位置上,让许多进程映射共享。mmap是一个系统函数,可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址。
  • 命令行参数: 程序的命令行参数
  • 环境变量:类似于Linux下的PATH,HOME等环境变量,子进程会继承父进程的环境变量。

3.linux中的进程怎么管理

1.常用的linux指令

ps指令查询进程的状态

gary@ubuntu:~/workspaces/blog/thread$ man ps

PS(1)                                                                           User Commands                                                                          PS(1)

NAME
       ps - report a snapshot of the current processes.

SYNOPSIS
       ps [options]

DESCRIPTION
       ps displays information about a selection of the active processes.  If you want a repetitive update of the selection and the displayed information, use top(1)
       instead.

2.linux下的API

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统系列(二)——进程 的相关文章

  • 如何将域名附加到我的服务器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个小问题 查看了这里和其他论坛 但找不到解决方案 我的网站位于 my domain com 网站位于共享主机上 在我的域名注册中 我添加了当我为
  • Docker:如何创建堆栈、多个映像或一个基础映像?

    I am new using Docker and I got the doubt of using one image base for my stack or I have to define each image depending
  • Boost 安装在我的 Ubuntu 上的什么位置?

    我从 Boost 网站下载 Boost 1 54 tar 然后按照此处 1 详细说明进行操作 特别是 我想将我的 boost 库安装在文件夹中 HOME BOOST 使用这个 bootstrap sh prefix HOME BOOST 但
  • SDL - 窗口不显示任何内容

    我正在执行 SDL C 的第一步 并从 www sdl org 上学习了一些教程 但有一个问题 我已经在我的 Linux Mint 系统上安装了 SDL2 编译了教程代码 ifdef cplusplus include
  • 如何在Linux中诊断Python进程占用CPU

    我的 python 进程在自动化脚本中的某个时刻开始在基于 Linux 的系统 Ubuntu 上占用 CPU 我正在尝试在 GDB 中调试这个问题 我对 GDB 还很陌生 是否有任何 GDB 命令可以提供有关哪个线程正在使用大部分 cpu
  • 如何在 Ubuntu x64 中使用 ptrace 插入 int3?

    我正在努力追随本指南 http eli thegreenplace net 2011 01 27 how debuggers work part 2 breakpoints 通过设置断点达到相同的结果 唯一的区别是我在 x64 系统上 所以
  • SO_REUSEPORT 可以在 Unix 域套接字上使用吗?

    Linux 内核 gt 3 9 允许通过设置在内核负载平衡的进程之间共享套接字SO REUSEPORT http lwn net Articles 542629 http lwn net Articles 542629 这如何用于类型的套接
  • Xvfb 冻结初始化 GLX 扩展

    我正在尝试运行无头 Xvfb 服务器来捕获 Amazon EC2 micro 上的屏幕截图 但它在 GLX 上陷入了困境 我使用此脚本安装了 GLX Xvfb 和所有库 https gist github com joekiller 414
  • 如何从脚本编辑 /etc/sudoers?

    我需要编辑 etc sudoers从脚本中添加 删除白名单中的内容 假设我有一个可以处理普通文件的命令 我如何将其应用到 etc sudoers 我可以复制并修改它 然后有visudo用修改后的副本替换原始版本 通过提供我自己的脚本 EDI
  • 我们如何在使用循环时调用 ansible playbook 中的变量

    我有两个文件 其中这些文件包含server names and server IP s 我想更改 替换一些特定的server names and IP addressees根据要求在两个文件中 这与这篇文章 因为它被要求开设一个新职位 ht
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 如何通过 makefile 在 Linux 上安装程序? [复制]

    这个问题在这里已经有答案了 可能的重复 Linux Unix make install 应该包含什么 https stackoverflow com questions 528399 what should linux unix make
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire

随机推荐

  • NeRF项目LLFF 解决新场景pose生成的问题

    最近一直在做NeRF相关的项目 其中LLFF前向数据集 是NeRF常用数据集 本文讲下怎么对NeRF数据进行处理 几个重要的链接地址 github llff GitHub Fyusion LLFF Code release for Loca
  • upload-labs-2

    登陆第二关 查看代码 发现是文件类验证 抓包 修改为允许发现成功 放包
  • solr的三种提交方式

    三种solr提交索引的方式 1 commit 通过api直接commit 这样性能比较差 在我测试下 平均每条commit600ms HttpSolrServer solrServer new HttpSolrServer http loc
  • Docker安装mysql

    Docker安装mysql 查看镜像 下载镜像 启动容器 进入mysql数据库 查看镜像 docker search mysql 5 7 下载镜像 docker pull mysql 5 7 启动容器 可以直接执行这一步 一步到位 dock
  • APP自动化测试-8.移动端混合应用自动化测试

    APP自动化测试 8 移动端混合应用自动化测试 文章目录 APP自动化测试 8 移动端混合应用自动化测试 前言 一 webview 1 webview简介 2 webview判断 二 环境准备 三 脚本编写 1 启动被测应用 2 进入web
  • 2021最新 腾讯云添加二级域名

    0 什么是二级域名 二级域名也就是在顶级域名下的子域名 在国际顶级域名下 它是指域名注册人的网上名称 在国家顶级域名下 它是表示注册企业类别的符号 我国在国际互联网络信息中心 Inter NIC 正式注册并运行的顶级域名是CN 这也是我国的
  • 虚拟服务器实现方式,服务器实现虚拟主机的三种主要方式

    服务器实现虚拟主机的三种主要方式 内容精选 换一换 弹性云服务器 Elastic Cloud Server ECS 是由CPU 内存 操作系统 云硬盘组成的基础的计算组件 购买时通过选择实例规格 操作系统 虚拟私有云 登录鉴权方式等信息实现
  • VMware虚拟机跑Linux系统无/dev/fb0解决办法

    最近在做摄像头的视频采集显示与处理 需要用到Frame Buffer的图形显示 我们知道在Linux系统应用中 可以通 过对 dev fb0 操作把数据显示在屏幕上 比如摄像头的图像采集 可以通过设备名 dev video0 来打开摄像头
  • 华为OD机试 - 单词搜索(Java)

    题目描述 找到它是一个小游戏 你需要在一个矩阵中找到给定的单词 假设给定单词 HELLOWORD 在矩阵中只要能找到 H gt E gt L gt L gt O gt W gt O gt R gt L gt D连成的单词 就算通过 注意区分
  • linux密码过期前警告天数,linux更改用户的密码过期时间

    对于新添加的用户 用户密码过期时间是从 etc login defs中PASS MAX DAYS提取的 普通系统默认就是99999 而安全操作系统4 0是90 更改此处 只是让新建的用户默认密码过期时间变化 已有用户密码过期时间仍然不变 功
  • score在java中_java基础

    DOC执行 set classpath c java Hello 将类的查找路径指向了c盘 在运行时 会从c盘下开始查找 mian 方法是程序的主方法 在一个java程序中有且只能有一个main 方法 main method 之前必须加上p
  • 关于“访问映射网络驱动器提示 本地设备名已在使用中,此连接尚未还原”解决方法!...

    这几天单位2台电脑出现故障 其中一台作为内部部门范围内文件服务器 另外一台电脑连接该机器的共享文件夹 一直正常 就这几天突然出现 访问映射网络驱动器提示 本地设备名已在使用中 此连接尚未还原 的错误 网上查找资料发现一段说明公司客户端的电脑
  • SpringMVC系列(二)之常用注解介绍及参数传递说明

    目录 前言 一 SpringMVC常用注解 1 1 RequestParam 1 2 RequestBody 1 3 PathVariable 1 4 RequestHeader 二 SpringMVC的参数传递 2 1 基础类型传参 可以
  • Java的作用域

    Java的作用域 作用域是指变量能生效的区域范围 声明在不同地方的变量具有不同的作用域 而决定作用域的就是花括号的位置 同时还决定了变量名的可见性与生命周期 Java语言中 变量的类型主要有成员变量 静态变量 和局部变量三种 类的成员变量
  • VS2013编译64位OpenSSL(附32位)

    安装ActivePerl 这个没什么好说的 直接运行msi即可 编译OpenSSL 1 使用Visual Studio Tool中的 VS2013 x64 本机工具命令提示 来打开控制台 也可以打开一个控制台 然后进到 安装路径 Micro
  • OLED拼接屏:打破显示界限,在教育培训中有哪些应用展示?

    早在20世纪初 人们就开始梦想着能够拥有一种透明的屏幕 可以将信息直接显示在空气中 然而 直到现在 这个梦想才真正实现 老透明屏是一种新型的显示技术 它可以将图像和文字直接投射到空气中 使其看起来像是悬浮在空中一样 老透明屏的工作原理是利用
  • [114]python supervisor使用

    Supervisor 是基于 Python 的进程管理工具 只能运行在 Unix Like 的系统上 也就是无法运行在 Windows 上 Supervisor 官方版目前只能运行在 Python 2 4 以上版本 但是还无法运行在 Pyt
  • MQTT在解析一条消息时收不到其他消息

    前提说明 客户端发送两个topic消息 第一个消息依赖第二个消息传入的值 两个topic分别为topic1 topic2 业务说明 topic1消息订阅之后 进行相关业务处理 查库插库等操作 然后轮训redis等待10s redis中存的时
  • 除法取模(比赛常用)

    由费马小定理可推出 其中m为素数 那么 就可以变成 如果m太大 可以使用快速求正整数幂
  • 操作系统系列(二)——进程

    往期地址 操作系统系列一 操作系统概述 本期主题 操作系统进程 文章目录 1 异常 1 前言 异常控制流是什么 2 异常的处理过程 3 异常的分类 4 异常和进程的关系 2 进程 1 进程的概念 2 进程所做的事情 意义 1 逻辑控制流 2