Linux系统编程04

news2024/10/7 17:31:49

进程的概念

进程(动态)是一个正在运行的程序(静态)
多道程序设计缺点:
(1)缺乏隔离,各个程序之间可以直接访问,使用对方的数据
(2)内存使用率低,如果一个新任务过来存放不下,我们需要将某个程序整个换出内存在进行存放
(3)地址使用麻烦,耨个程序可能会被多次加载,每次加载所处的物理地址都不一致,只能使用相对地址,对硬件要求很高
解决上面的问题,我们提出了虚拟:
我们在用户和内存中间加了一个虚拟内存,将复杂的底层内存抽象成建简单的结构
在这里插入图片描述
虚拟如何实现对内存的抽象:
(1)每个进程在逻辑上有自己独立的内存空间(进程地址空间),看不到其他进程,让用户感觉自己在独占整个电脑
(2)使用虚拟内存

虚拟内存的实现

内存里面我们使用到的热点内存是很难少的,大概率不会全部内存都使用到
局部性原理:我们在调用内存区域的某条指令,我们很有可能访问这条指令周围的其他指令
操作系统一般会对内存进行分页和分块进行存储使用,分页是目前大部分在使用的
分页:将内存分割成大小相同(4096B)的单元
我们在将虚拟内存的热点页驻留到内存里面,如果现在我们有很多页需要驻留,那么我们会将长期不用的页换出到磁盘的交换分区(虚拟内存),以防止下次用户需要对指令进行调用
对于用户只需要关注虚拟内存,并不需要关注物理地址,在代码中只需要用虚拟内存
在这里插入图片描述
分时系统缺陷
用户需要主动放弃CPU,这样就导致程序员不仅要关注自己代码的实现,还要区关注进程对CPU的使用情况
为了解决这个问题,我们在用户和CPU之间添加一个虚拟CPU,让用户觉得自己在独占CPU,这样程序员便不用关注其他用户进程对CPU的使用
并行在某个时刻,多个进程同时运行 -------只有一个CPU核心,不能并行
并发在某段时间,多个进程同时运行
进程的切换
进程可通过修改寄存器的pc指针实现切换,寄存器的状态称为上下文
Linux一般使用完全公平调度算法
行为和时间片轮转几乎一样,但可以动态的根据运行情况调整优先级
Linux将进程信息存储在task_struct任务描述符里,然后将其放进任务队列,这个队列是一个双向链表
pid时一个正整数,给用户唯一标识不同的进程
在这里插入图片描述
其中PPID是表示当前进程的父进程,在Linux中,进程之间存在亲缘关系ps的父进程是bash

获取PID
在这里插入图片描述
这个操作永远都不会出错,因此执行此操作不用进行错误检查
在这里插入图片描述
进程的权限
之前我们学过文件有9种权限分别为u,g,o三种用户组赋予r,w,x权限
一个文件的权限实现是要确定执行这个文件的进程所拥有的权限
在这里插入图片描述
在这里插入图片描述
默认情况下用户的uid有效用户身份和euid真实身份都是一样的,都是启动这个进程的用户,我们怎么判断这个用户是否能够启动这个进程,首先user要有可执行程序的X权限,通过该程序启动一个进程,进程的uid和euid都是user
同样的可执行文件对不同的用户其所可以执行的操作权限是不同的
其实文件的权限有12位权限处理不同用户组u,g,o下的r,w,x还有suid,sgiid,sticky权限
suid
suid权限生效的条件
(1)用户ux执行权限和 其他人o的执行x必须存在
(2)用户us(suid)存在
其他用户o通过可执行程序启动的进程euid更改程序的拥有者,这是就会更改程序的uid,此时对应的uid其他用户o可以拥有此执行程序的权限
在这里插入图片描述
我们可以看到开始我们没有改变可执行文件的suid权限时,我们在用其他用户执行文件时,会报错无法打开文件,这是其他用户就是第三者,没有权限执行这个程序,当我们切换为程序所有者更改suid属性,当我们切换回其他用户时,就可以正常运行,并且回将其真实归属用户和当前执行用户的id打印出来

sgid
sgid权限生效的条件
(1)同时拥有其他用户o的执行权限x和组内用户g的执行权限x
(2)拥有组内用户的s(sgid)
在这里插入图片描述
在这里插入图片描述
stick粘滞位
针对目录文件的
stick起作用的条件
对于其他用户o,拥有wt权限,给文件加上stick之后,其他用户可以创建文件,可以删除自己的我呢见,不能删除别人的文件
在这里插入图片描述

进程相关命令

在这里插入图片描述

ps的两种用法
(1)ps -elf可以展示所有的进程信息
在这里插入图片描述
F--flag属性一般不起任何作用,数值越低优先级越高
S--进程的status状态 D不可中断的睡眠(不会响应信号),一般是读写磁盘的时候;I空闲状态;R运行态或就绪态(因此PS指令不能区分就绪态或运行态的,因为PS也是一个进程,所以不能获取到别的进程的状态);S可中断睡眠,可以响应信号,类似于scanf,read一个管道等;T被暂停(CTRL+Z);tgdb中调试暂停;Z僵尸进程(进程已终止,资源未回收,主要是task_struct未回收)
在这里插入图片描述
PEI NI表示优先级
ADDR驻留内存的起始地址
SZ驻留内存的大小
WCHAN(重要)阻塞的系统调用
(2) ps aux
在这里插入图片描述
可以显示内存使用率

VSZ虚拟内存的大小

RSS驻留集(虚拟内存分配在物理内存中有多大)大小

START状态
以下,辅助状态
在这里插入图片描述
专门看内存的命令free
在这里插入图片描述
Mem:物理内存
Swap:交换分区
shared共享内存
buffcache的区别
(1)buff是内核缓冲区,cashe是页缓存
(2)buff本质是一个队列,采用先进先出的结构,防止读取数据或者写入数据某一操作过快,而不均衡,cashe为了提高速度,将我们经常访问的数据复制一份放在高速缓存里面,让使用数据能够迅速找到

ps -elf只能获取某一时刻的进程状态
top获取实时的进程状态
在这里插入图片描述
在这里插入图片描述

优先级系统

Linux中有140个优先级级别Ubuntu中的优先级标号是-40 ~ 99数值越低,优先级越高
这些优先级又被分为两个部分
-40 ~ 59 实时优先级,高优先级的策略先运行,如果处于这个区间优先级的程序就会使用FIFO(先来先处理)以及RR(时间片流转)两种调度算法
60 ~ 99 普通优先级,使用完全公平调度算法
用户无法修改调度策略,而且用户只能修改进程优先级在60 ~ 99之间进行修改

NiCE值 间接修改优先级,可以使用nice值启动进程

NICE-20019
PRI608099

在这里插入图片描述

在这里插入图片描述
增加NICE值
在这里插入图片描述
我们可以将进程的优先级调高,但是不随意将进程的优先级调低,如果要将进程优先级调低,就需要使用sudo,但是优先级也只能在普通优先级数值内进行调整
在这里插入图片描述
在这里插入图片描述
renice -n -10 -p while1 sudo renice -n -10 -p while1两个指令也可以调整优先级,但也只能在普通优先级里面进行调整

前台和后台

前台:可以响应键盘中断的进程就叫前台进程(CRTL + C 中止,CTRL + \终止,CTRL + Z 暂停)
后台:不可以响应键盘中断的进程就叫后台进程

默认启动的进程是前台运行态进程
./while1 &以这样的命令启动时默认启动运行态的后台进程
jobs可以罗列出本窗口中所有的前台和后台进程,不同的窗口运行jobs打印的数据都是不一样的,只针对bash
在这里插入图片描述
使用fg将后台进程拉到前台
fg 1是将上面jobs里面显示的序号进程号
在这里插入图片描述
使用CTRL + Z将前台进程转为后台stopped状态进程
使用bg命令将后台暂停(stopped)进程转为运行状态
使用kill命令杀死后台进程(1.获取pid;2,kill -9 pid)任何程序执行这个指令都会被杀死
在这里插入图片描述

crontab定时任务

单个用户的定时任务 crontab -e
在这里插入图片描述
上面表示在4月11号17点的每一分钟向/home/mask/111.txt文件中写如123字符串
多用户的定时任务
sudo vim /etc/crontab
在这里插入图片描述

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

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

相关文章

正点原子嵌入式linux驱动开发——LED驱动开发

在上一篇笔记中,详细的讲解了字符设备驱动开发步骤,并且用一个虚拟的chrdevbase设备为例完成了第一个字符设备驱动的开发。本章就开始编写第一个真正的Linux字符设备驱动。在正点原子STM32MP157开发板上有一个LED灯,本章就学习一下如何编写Li…

探讨Unity新的收费模式:对开发者与游戏行业的影响、负面因素的解析及面对挑战的建议

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》采购供应链共享平台人员,财务规则对账人员,物流门禁计量系统对接人员,ERP事业部人员 Unity是一款备受开发者欢迎的跨平台游戏引擎&#xff0c…

基于SSM的台球厅管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

【再识C进阶5(上)】详细介绍C语言文件操作——文件是用于存储数据

前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏&#x1…

成绩查询页面和自助查询方式

科技发展让我们有更多的方式来发布和查询学生成绩。今天,我想向大家介绍什么是成绩查询页面,并分享如何通过各种代码和Excel来实现让学生自助查询成绩。 成绩查询页面是一个专门用来发布和查询学生成绩的网络页面。这个页面具有发布、查询、统计成绩等功…

Vue 3使用 Iconify 作为图标库与图标离线加载的方法、 Icones 开源在线图标浏览库的使用

之前一直naive-ui搭配使用的是xicons,后来发现Iconify支持的图标合集更多,因此转而使用Iconify。 与FontAwesome不同的是,Iconify配合Icones相当于是一个合集,Iconify提供了快捷引入图标的方式,而Icones是一个大的图标…

二、vue基础语法

一、模板语法 1、文本渲染 使用双花括号语法插入文本 <template><div><h3>msg: {{ message }}</h3></div> </template><script> export default {data() {return {message: "输出信息"}} } </script><style s…

SAP 路径及运输功能

一、 概述 SAP的发运功能包括两部份内容&#xff0c;一是运输路径&#xff1b;二是运输功能。运输路径是运输功能的基础。 SAP 中的运输功能是后勤执行的一部分&#xff0c;用于自动计算交货成本&#xff1b;也就是说&#xff0c;SAP 可以让系统自动对销售发货的商品计算运费&…

web APIs——第一天(上)

变量声明的时候建议 const优先&#xff0c;尽量使用const 原因&#xff1a; const语义化更好很多变量我们声明的时候就知道他不会被更改了&#xff0c;那为什么不用const呢&#xff1f;实际开发中也是&#xff0c;比如react框架&#xff0c;基本const如果你有纠结的时候&…

记一次Clickhouse 复制表同步延迟排查

现象 数据从集群中一个节点写入之后&#xff0c;其他两个节点无法及时查询到数据&#xff0c;等了几分钟。因为我们ck集群是读写分离架构&#xff0c;也就是一个节点写数据&#xff0c;其他节点供读取。 排查思路 从业务得知&#xff0c;数据更新时间点为&#xff1a;11:30。…

信驰达RF-BM-2340x系列BLE蓝牙模块正式登录TI官网

信驰达作为TI中国低功耗连接技术第三方IDH&#xff0c;RF-BM-2340x系列低功耗蓝牙模块正式通过TI认证并在全球进行推广。 图 1 TI官网信驰达RF-BM-2340x系列BLE蓝牙模块 一直以来&#xff0c;信驰达重视在无线射频通信领域基础技术上的投入&#xff0c;奠定了公司在低功耗蓝牙…

Redis数据结构之SDS

前言 字符串在 Redis 中的应用场景十分广泛&#xff0c;所有的键都是字符串类型&#xff0c;值也可能是字符串类型。 比如电商系统用 Redis 缓存商品信息&#xff0c;可以把商品 ID 作为键&#xff0c;商品信息序列化为 JSON 后作为值写入&#xff1a; SET item:1001 {"…

使用python自动化操作如何使用subprocess,mac如何查看软件安装路径

使用下面这种方法实现需要配置全局的环境变量&#xff0c;很麻烦 import subprocessdef open_wps_new_doc():try:# 打开WPS应用程序subprocess.Popen(wps)# 等待一段时间&#xff0c;确保WPS完全打开time.sleep(2)# 发送快捷键组合&#xff0c;新建一个Word文档pyautogui.hotk…

linux进阶(3)

课程链接 CH10-2-Apache的其他用途_哔哩哔哩_bilibili scp不够好,因为他需要知道服务器上具体的一个目录

MySQL -- 数据库基础

MySQL – 数据库基础 文章目录 MySQL -- 数据库基础一、基础知识1.什么是数据库2.连接服务器3.服务器、数据库、表的关系3.MySQL架构4.SQL分类5.存储引擎 一、基础知识 1.什么是数据库 文件存储数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件…

【ARM AMBA5 CHI 入门 12.2 -- CHI 协议层详细介绍 】

文章目录 1 协议层1.1 协议层传输通道1.2 域段1.2.1 ID域段1.2.2 其他关键域段1.2.2.1 Address1.2.2.2 Secure bit1.2.2.3 Memory Attributes1.2.2.4 Transaction attribute combinations 1.4.1 Transaction 路由1.4.2 SAM 介绍1.4.3 Node ID 1.5 节点间数据怎么传输的呢&#…

jdk11的HttpClient

我们都知道在jdk11之前都在用okhttp或者org.apache.httpcomponents 其实早在jdk9的时候这个方案就在孵化中 上面的截图来自openjdk的官网&#xff0c;注&#xff1a;openjdk是个开源项目&#xff0c;不存在侵权现象 这是openjdk的官网&#xff1a;JEP 110: HTTP/2 Client (In…

vue 插槽 作用域插槽

vue 插槽 作用域插槽 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day05\准备代码\10-插槽-作用域插槽 vue --version vue crea…

安科瑞关于红外测温技术在变电站运维中的应用

安科瑞 崔丽洁 红外测温技术 特点 工作中的输变电机械设备由于电流热效应产生了红外线照射效应&#xff0c;从而在电气设备表层形成了相应的高温场&#xff0c;而红外线测温高温技术则透过吸取这些自高温场发出的红外线照射热能&#xff0c;并透过电流效应以及放大器和A/D转换器…

Linux - 还不懂 gdb 调试器?(调试软件)

前言 当前&#xff0c;我们可以使用 make/makefile 来程序化执行代码文件&#xff1b;可以使用 gcc/g 等编译器来编译代码&#xff1b;可以使用 vim 编辑器来编写代码&#xff1b;其实在 Linux 当中还有一个工具&#xff0c;可以实现调试工作&#xff0c;这个工具就是 -- gdb。…