Linux系统编程

目录

前言:

一、 并发

单轨道和多轨道程序设计

单轨道:

多轨道:

 二、进程 

1.概念:

2.进程状态:

状态转换图 

3.进程特点:

4.PCB进程控制块

PCB 进程控制块和文件描述符表 

三、虚拟地址空间

虚拟地址空间与进程的关系:


前言:

之前的几篇文章主要介绍了一下Linux的基础知识,本章开始,主要讲解的就是操作系统的知识了,如果学习这方面需要你有一定的编程知识,如果你是刚刚学习的话可以先从C语言开始学习,不然学习这些知识可能会很吃力。

一个正在运行的程序会做一件非常简单的事情:执行指令。处理器从内存中获取(fetch) 一条指令,对其进行解码),然后执行它。完成这条指令后, 处理器继续执行下一条指令,依此类推,直到程序最终完成。 这样,我们就描述了冯·诺依曼计算模型的基本概念。

听起来很简单对吧?但我们将了解到在一个程序运行的同时,还有很多其他事 情也在同步进行——主要是为了让系统易于使用。 实际上,有一类软件负责让程序运行变得容易(甚至允许你同时运行多个程序),允许 程序共享内存,让程序能够与设备交互,以及其他类似的有趣的工作。这些软件称为操作系统(Operating System,OS),因为它们负责确保系统既易于使用又正确高效地运行。

操作系统是管理计算机硬件和软件资源、控制计算机运行的系统软件,它是计算机系统中最基本、最重要的系统软件,它提供了一个让用户与系统进行交互的操作界面。

简单点来说,操作系统就是一堆软件代码,这些代码作为我们用户程序和电脑硬件的中间层,帮助我们更加简单、高效的利用计算机硬件。

一、 并发

例如我们平时用电脑,你可以一边浏览网页,一边听着音乐,一边进行其他操作,如果把这些功能看作是一个进程的话,那么他们怎么做到可以同时实现呢?因为并发

并发是指在同一时间段内,多个任务可以在同一个或多个处理器上同时运行,但不一定是同时开始和结束。

单轨道和多轨道程序设计

单轨道:

程序的执行流只有一条路径,不存在分支或循环结构

所有进程排队执行,假设A阻塞,B就只能等待,即时cpu是空闲状态

多轨道:

允许同时执行多个任务或流程,以提高系统的响应速度和处理能力(并发) 

在多道程序设计模型中,多个进程轮流使用CPU(分时复用 CPU 资源)。而当下常见CPU 为纳秒级,1秒可以执行大约 10 亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。 

实际上并发是宏观并行,微观串行

 二、进程 

1.概念:

进程是系统进行资源分配的基本单位,是操作系统的基础

其实进程就是一个正在执行中的程序,现在打开电脑的任务管理器,其实每一个正在运行的都是一个进程 。

进程的概念主要有两点:

  • 进程是一个实体,每一个进程都有他自己的地址空间,包括文本区,数据区,堆区,栈区
  • 进程是一个执行中的程序,程序是一个没有生命的实体,只有处理器赋予程序生命时,他才能成为一个活动的实体

2.进程状态:

  • 运行(running):在运行状态下,进程正在处理器上运行。这意味着它正在执行指令。
  • 就绪(ready):在就绪状态下,进程已准备好运行,但由于某种原因,操作系统选择不在此时运行。
  • 阻塞(blocked):在阻塞状态下,一个进程执行了某种操作,直到发生其他事件时才会准备运行。一个常见的例子是,当进程向磁盘发起 I/O 请求时,它会被阻塞, 因此其他进程可以使用处理器

状态转换图 

3.进程特点:

  • 动态性:进程是程序的一次执行过程,具有动态性,可以在执行过程中产生新的进程。
  • 并发性:多个进程可以同时存在,并且它们之间可以并发执行。
  • 独立性:每个进程都拥有自己独立的内存空间和系统资源,不会相互干扰。
  • 异步性:进程之间的执行顺序是不确定的,可以异步执行。

4.PCB进程控制块

操作系统负责管理和调度进程,包括进程的创建、终止、挂起、恢复、切换等操作。进程控制块(Process Control Block)是操作系统用来管理进程的数据结构,它记录了进程的状态、优先级、程序计数器、堆栈指针等信息。

PCB 进程控制块和文件描述符表 

每个进程在内核中都有一个进程控制块,来维护进程的相关信息,Linux内核的进程控制块时 task_struct结构体。结构体的定义在usr/src/linux-headers-3.*/include/linux/sched.h 。

PCB通常包括以下信息:

  • 进程ID(Process ID):唯一标识进程的编号。
  • 进程状态:记录进程当前的状态,如新建、就绪、运行、阻塞等。
  • 优先级:记录进程的优先级,用于进程调度。
  • 程序计数器(Program Counter):记录进程当前执行的指令地址。
  • 堆栈指针:指向进程堆栈的顶端,用于保存进程的局部变量和函数调用信息。
  • 内存管理信息:记录进程所使用的内存空间和虚拟地址转换信息。
  • I/O 状态信息:记录进程当前的 I/O 状态和请求。
  • 进程控制信息:记录进程的父进程、子进程等信息。
  • 文件描述符:通过文件描述符找到inode,通过 inode 找到磁盘数据块。

操作系统可以通过 PCB 来获取进程的状态信息,并在进程切换时更新 PCB 中的信息。PCB 在操作系统中占用内存空间,因此 PCB 的大小直接影响操作系统的性能和资源消耗。 

内核区中很重要的一个就是进程管理,进程管理中有一个区域就是PCB(本质是个结构体):
PCB 中有文件描述符表,文件描述符表中存放着打开的文件描述符,涉及到文件的IO操作都会用到这个文件描述符.

三、虚拟地址空间

虚拟地址空间是计算机体系结构中的概念,用于表示进程在运行时可用于访问内存的地址范围。每个运行的进程都拥有自己的虚拟地址空间,该空间在逻辑上为进程提供了连续的地址范围。

虚拟地址空间一般被分为6个区域:

  • 代码区(Text Segment):用于存储可执行程序的指令代码。
  • 数据区(Data Segment):包含全局变量、静态变量和常量数据。
  • 堆(Heap):用于动态分配内存。在堆中,通过调用像malloc()或new这样的函数来申请和释放内存。
  • 栈(Stack):用于存储局部变量和函数调用的上下文信息。每当函数被调用时,栈会自动分配一部分内存用于存储函数的参数、局部变量和返回地址。
  • 共享库区域(Shared Libraries):用于存储共享库(如动态链接库)的代码和数据。
  • 内核区域(Kernel Space):用于操作系统内核的代码和数据,用户进程无法直接访问。

 每个区域在虚拟地址空间中是连续分布的,但它们的物理内存位置可以是分散的。操作系统负责将虚拟地址转换为对应的物理地址,以便进程可以访问实际的内存。

虚拟地址空间与进程的关系:

  • 虚拟地址空间既是独立于进程的概念,又是进程中的重要组成部分,为进程提供了独立的内存空间和访问机制。 
  • 进程的虚拟地址空间分为用户区和内核区,其中内核区是受保护的,用户是不能够对其进行读写操作的。
  • 然而,在实际的操作系统中,虚拟地址空间是作为进程的一部分而存在的。每个运行的进程都有自己的虚拟地址空间,用于存储其代码、数据和堆栈等信息。操作系统通过虚拟内存管理机制将进程的虚拟地址转换为对应的物理地址,以便进程可以访问实际的内存。


 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript中闭包的定义、原理及应用场景

JavaScript是一门以函数为核心的编程语言,其独特的闭包特性是众多开发者所喜爱的特点之一。闭包是一种非常强大的概念,可以帮助我们实现许多复杂的功能和逻辑。本篇博客将为大家深入介绍JavaScript中闭包的定义、原理及应用场景,并通过示例代…

svg基础(三)分组、渐变

上一篇文章简单介绍了svg常用标签及其属性,本篇主要介绍分组&#xff0c;渐变 1 分组<g> 分组容器 添加到g元素上的变换会应用到其所有的子元素上添加到g元素的属性会被其所有的子元素继承定义复杂对象&#xff0c;可通过<use>元素引用 1.1 分组 <svg>&…

市场复盘总结 20240206

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 今日梯队&#xff1a; 二进三&#xff1a…

CF1404BTree Tag/ BZOJ0487. 树上追逐详解

1.题目 传送门:Tree Tag - 洛谷 2.思路 我们考虑什么情况下Alice可以获胜. 如果​ ≤ da&#xff0c;则Alice可以一步就追上Bob. 如果Alice处在一个能覆盖整棵树的点&#xff0c;即2da 1≥树的直径&#xff0c;那么Bob也无论走到哪里Alice都能追到,Alice获胜. 其它情况下…

阿里云企业用户2核4G5M固定带宽199元一年,续费不涨价

2024年2月阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核…

Android中设置Toast.setGravity()了后没有效果

当设置 toast.setGravity()后&#xff0c;弹窗依旧从原来的位置弹出&#xff0c;不按设置方向弹出 类似以下代码&#xff1a; var toast Toast.makeText(this, R.string.ture_toast, Toast.LENGTH_SHORT)toast.setGravity(Gravity.TOP, 0, 0)//设置toast的弹出方向为屏幕顶部…

Python os模块详解

os模块与目录相关的函数 与目录相关的函数如下&#xff1a; os.getcwd()&#xff1a;获取当前目录。 os.chdir(path)&#xff1a;改变当前目录。 os.fchdir(fd)&#xff1a;通过文件描述利改变当前目录。该函数与上一个函数的功能基本相似&#xff0c;只是该函数以文件描述…

计算机服务器中了mkp勒索病毒如何解密,mkp勒索病毒解密流程

随着网络技术的不断发展与应用&#xff0c;越来越多的企业走向数字化办公模式&#xff0c;计算机极大地方便了企业的正常生产运营&#xff0c;但网络威胁的手段也不断增加。近期&#xff0c;云天数据恢复接到很多企业的求助&#xff0c;企业的计算机服务器遭到了mkp勒索病毒攻击…

Vue3动态CSS

Vue3动态CSS 动态css值动态css对象module模式 动态css值 <template><div class"div">动态css</div> </template><script setup langts> import {ref} from vueconst style ref(blue) </script><style scoped> .div{colo…

PyTorch 2.2 中文官方教程(六)

音频 音频 I/O pytorch.org/tutorials/beginner/audio_io_tutorial.html 此教程已移至pytorch.org/audio/stable/tutorials/audio_io_tutorial.html 3 秒后将重定向。 音频重采样 原文&#xff1a;pytorch.org/tutorials/beginner/audio_resampling_tutorial.html 译者&…

Linux系统中安装MAVEN

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

我主编的电子技术实验手册(01)——度量、计数与绘图

本专栏是笔者主编教材&#xff08;图0所示&#xff09;的电子版&#xff0c;依托简易的元器件和仪表安排了30多个实验&#xff0c;主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】&#xff0c;精心设计的【实验步骤】&#xff0c;全面丰富的【思考习…