Linux--操作系统/进程

news2025/3/15 14:56:21

ok,我们今天学习linux中的操作系统和进程

1. 冯诺依曼体系

我们常⻅的计算机,如笔记本。我们不常⻅的计算机,如服务器,⼤部分都遵守冯诺依曼体系。

内存是CPU和外设之间的一个巨大的缓存!

截⾄⽬前,我们所认识的计算机,都是由⼀个个的硬件组件组成

  • 输⼊单元:包括键盘,⿏标,扫描仪,写板等
  • 中央处理器(CPU):含有运算器和控制器等 
  • 输出单元:显⽰器,打印机等

关于冯诺依曼,必须强调⼏点:

  • 这⾥的存储器指的是内存
  • 不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)
  • 外设(输⼊或输出设备)要输⼊或者输出数据,也只能写⼊内存或者从内存中读取。
  • ⼀句话,所有设备都只能直接和内存打交道

对冯诺依曼的理解,不能停留在概念上,要深⼊到对软件数据流理解上,请解释,从你登录 上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗⼝,开始给他发消息,到他的 到消息之后的数据流动过程。如果是在qq上发送⽂件呢?

当数据在计算机内部设备流转的时候,本质是在不同的设备间进行拷贝!设备的拷贝效率本质就是计算机的效率

2. 操作系统(OperatorSystem)

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,⽂件管理,驱动管理)
  • 其他程序(例如函数库,shell程序等等)

OS的目的

  • 对下,与硬件交互,管理所有的软硬件资源
  • 对上,为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境

核心功能

在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件

面向对象语言

先描述    再组织

面向对象 标准库(STL)

3. 进程

3-1 基本概念与基本操作

  • 课本概念:程序的⼀个执⾏实例,正在执⾏的程序等
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

进程 = 内核数据结构(task_struct) + 程序的代码和数据

对进程的管理就成了对数据的增删查改

3-1-2 描述进程-PCB 基本概念

  • 进程信息被放在⼀个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(processcontrolblock),Linux操作系统下的PCB是: task_struct

task_struct-PCB的⼀种

  • 在Linux中描述进程的结构体叫做task_struct。
  • task_struct是Linux内核的⼀种数据结构,它会被装载到RAM(内存)⾥并且包含着进程的信息。

3-1-3 task_ struct

  • 内容分类
  • 标示符:描述本进程的唯⼀标⽰符,⽤来区别其他进程。
  • 状态:任务状态,退出代码,退出信号等。
  • 优先级:相对于其他进程的优先级。
  • 程序计数器:程序中即将被执⾏的下⼀条指令的地址。
  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下⽂数据:进程执⾏时处理器的寄存器中的数据[休学例⼦,要加图CPU,寄存器]。
  • I / O状态信息:包括显⽰的I/O请求,分配给进程的I/ O设备和被进程使⽤的⽂件列表。
  • 记账信息:可能包括处理器时间总和,使⽤的时钟数总和,时间限制,记账号等。
  • 其他信息 • 具体详细信息后续会介绍

组织进程

查看进程

1. 进程的信息可以通过 /proc 系统⽂件夹查看

如 :要获取PID为1的进程信息,你需要查看  /proc/1 这个⽂件夹。

2. ⼤多数进程信息同样可以使⽤top和ps这些⽤⼾级⼯具来获取

 #include <stdio.h>
 #include <sys/types.h>
 #include <unistd.h>
 int main()
 {
 while(1){
 sleep(1);
 }
 return 0;
 }

通过系统调用获取进程标识符

  • 进程id PID
  • 父进程id PPID
 #include <stdio.h>
 #include <sys/types.h>
 #include <unistd.h>
 int main()
 {
 printf("pid: %d\n", getpid());
 printf("ppid: %d\n", getppid());
 return 0;
 }

getpid 获得进程的标识符

pid_t id = getpid(); 获得pid

/proc目录/文件夹   Linux中的进程目录

/proc不是磁盘级别的文件,不需要存储任何信息,而是进程文件信息。

.exe

Windows中,执行一个程序,双击.exe文件,本质上就是启动一个进程(两种情况:1执行完就退出 2. 一直不退,直到用户退出----常驻进程(杀毒安全软件))

cwd (current work dir)

当前工作目录,默认创建进程会在当前工作目录

chdir更改进程的目录 

父进程id ppid

在Linux系统中,启动之后,新建任何进程的时候,都是由自己的父进程创建的!

命令行中,执行命令/执行程序, 本质是bash的进程,创建的子进程,由子进程执行我们的代码!

每登陆一次,就会创建一个bash

使用系统调用,创建进程

fork函数

  • 运行 man fork 认识fork
  • fork有两个返回值
  • 父子进程代码共享,数据鸽子开辟空间,私有一份(采用写时拷贝)

fork给父进程返回子进程的pid,给子进程返回0

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
 {
     int ret = fork();
     printf("hello proc : %d!, ret: %d\n", getpid(), ret);
     sleep(1);
     return 0;
 }

Linux中,所有进程都是树型结构

fork之后通常要用 if  进行分流

#include <stdio.h>
 #include <sys/types.h>
 #include <unistd.h>
 int main()
 {
     int ret = fork();
     if(ret < 0){
         perror("fork");
         return 1;
     }
     else if(ret == 0){ //child
         printf("I am child : %d!, ret: %d\n", getpid(), ret);
     }else{ //father
         printf("I am father : %d!, ret: %d\n", getpid(), ret);
     }
     sleep(1);
     return 0;
}

fork为什么会有两个返回值?

父进程和子进程代码时共享的,但是数据时各自私有一份的

两个返回值给父子如何返回?

fork给父进程返回子进程的pid,给子进程返回0

少年没有乌托邦,心向远方自明朗!

如果这个博客对你有帮助,给博主一个免费的点赞就是最大的帮助
欢迎各位点赞,收藏关注
如果有疑问或有不同见解,欢迎在评论区留言
后续会继续更新大连理工大学相关课程和有关Linux的内容和示例
点赞加关注,学习不迷路,好,本次的学习就到这里啦!!!

ok,我们下次再见!

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

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

相关文章

Java面试八股—Redis篇

一、Redis的使用场景 &#xff08;一&#xff09;缓存 1.Redis使用场景缓存 场景&#xff1a;缓存热点数据&#xff08;如用户信息、商品详情&#xff09;&#xff0c;减少数据库访问压力&#xff0c;提升响应速度。 2.缓存穿透 正常的访问是&#xff1a;根据ID查询文章&…

Web后端开发之Maven

Maven Mven是apache旗下的一个开源项目&#xff0c;用来管理和构建java项目的工具。 通过一小段描述信息来管理项目。 Maven的作用 1.依赖管理&#xff1a;方便快捷的管理项目依赖的资源&#xff08;jar包&#xff09;&#xff0c;避免版本冲突问题 以前用某个jar包需要下载…

there are no enabled repos

我做了两个操作 第一个操作&#xff1a; 1.先在本地电脑&#xff0c;也就是在我们电脑的桌面上下载 https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo 2.在CentOS 创建etc文件夹 3在etc文件夹内创建yum.repos.d文件夹 4.将下载好的repo 黏贴到yum.repos.d…

OpenEuler-22.03-LTS上利用Ansible轻松部署MySQL 5.7

一、需求 使用ansible自动化部署mysql二进制部署mysql部署mysql并创建JDBC用户 二、环境信息 本文涉及的代码&#xff0c;配置文件地址&#xff1a; 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1g6y 软件名称版本备注Ansible2.9.27All modules — Ansible Doc…

前端无限滚动内容自动回收技术详解:原理、实现与优化

文章目录 一、核心需求与技术挑战1.1 无限滚动的问题症结1.2 自动回收的三大目标 二、技术实现原理2.1 虚拟滚动核心机制2.2 关键技术指标 三、完整实现方案3.1 基础HTML结构3.2 CSS关键样式3.3 JavaScript核心逻辑3.3.1 滚动控制器3.3.2 动态尺寸处理 四、性能优化策略4.1 内存…

如何在Ubuntu上构建编译LLVM和ISPC,以及Ubuntu上ISPC的使用方法

之前一直在 Mac 上使用 ISPC&#xff0c;奈何核心/线程太少了。最近想在 Ubuntu 上搞搞&#xff0c;但是 snap 安装的 ISPC不知道为什么只能单核&#xff0c;很奇怪&#xff0c;就想着编译一下&#xff0c;需要 Clang 和 LLVM。但是 Ubuntu 很搞&#xff0c;他的很多软件版本是…

【MySQL】表的约束(上)

文章目录 表的约束什么是表的约束空属性默认值列描述&#xff08;comment&#xff09;零填充&#xff08;zerofill&#xff09;主键 总结 表的约束 什么是表的约束 表的约束&#xff08;Constraints&#xff09;是数据库表中的规则&#xff0c;用于限制存储的数据&#xff0c…

静态分析技术:Jadx-GUI高级用法与模式识别

1. 深度反编译策略 1.1 多层级反混淆方案 代码恢复流程&#xff1a; graph TD A[混淆代码] --> B{符号恢复} B -->|字典匹配| C[变量重命名] B -->|类型推导| D[参数重构] C --> E[控制流优化] D --> E E --> F[语义化输出] 反混淆脚本示例&…

30天学习Java第六天——Object类

Object类 java.lang.Object时所有类的超类。Java中所有类都实现了这个类中的方法。 toString方法 将Java对象转换成字符串的表示形式。 public String toString() {return getClass().getName() "" Integer.toHexString(hashCode()); }默认实现是&#xff1a;完…

【C语言】编译和链接详解

hi&#xff0c;各位&#xff0c;让我们开启今日份博客~ 小编个人主页点这里~ 目录 一、翻译环境和运行环境1、翻译环境1.1预处理&#xff08;预编译&#xff09;1.2编译1.2.1词法分析1.2.2语法分析1.2.3语义分析 1.3汇编1.4链接 2.运行环境 一、翻译环境和运行环境 在ANSI C…

DataWhale 速通AI编程开发:(基础篇)第1章 环境下载、安装与配置

课程地址&#xff1a;Datawhale-学用 AI,从此开始 vscode 更新为最新版 目前绝大多数deepseek非官方渠道均兼容openai的api格式&#xff0c;这里以硅基流动为例进行演示&#xff0c;其他非官方渠道同理。 点击链接注册账号之后&#xff0c;点击“实名认证“完成实名&#xff0…

本地知识库RAG总结

目录 RAG流程: 知识库的要求&#xff1a; 知识抽取&#xff1a; 知识存储: 向量化: 知识检索: 应用客户端: RAG智能问答应用几个痛点&#xff1a; 如何提升召回率改进思路&#xff1a; 如何提升回答专业性&#xff1a; RAG评测&#xff1a; 总结&#xff1a; 参考…

torch_geometric 安装

环境监测&#xff1a; import torch print(torch.__version__) # 查看pytorch安装的版本号 print(torch.cuda.is_available()) # 查看cuda是否可用。True为可用&#xff0c;即是gpu版本pytorch print(torch.cuda.get_device_name(0)) # 返回GPU型号 …

网页打印很简单!用web打印插件lodop轻松实现文件打印

最近&#xff0c;给客户发一个事件提醒软件&#xff0c;其中客户要求实现打印功能&#xff0c;因为是用asp.net mvc 开发首先考虑到用水晶报表来实现&#xff08;crystalReport&#xff09;&#xff0c;以前开发c# winform程序&#xff0c;感觉水晶报表还是蛮好的&#xff0c;但…

北京迅为iTOP-RK3568开发板OpenHarmony系统南向驱动开发实操-HDF驱动配置LED

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

驻场运维服务方案书(Word文件)

目 录 第一章 背景分析 1.1. 项目背景 1.2. 项目目标 1.3. 系统现状 1.3.1. 网络系统 1.3.2. 设备清单梳理 1.3.3. 应用系统 第二章 需求分析及理解 2.1. 在重要日期能保障信息系统安全 2.2. 信息系统可长期安全、持续、稳定的运行 2.3. 提升发现安全问题、解决安全…

【时时三省】(C语言基础)用printf函数输出数据2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 格式字符 在输出时&#xff0c;对不同类型的数据要指定不同的格式声明&#xff0c;而格式声明中最重要的内容是格式字符。常用的有以下几种格式字符。 ( 1 ) d格式符。用来输出一个有符号的…

django框架 [面试篇]

Django 是一个基于 Python 的web框架&#xff0c;遵循"快速开发&#xff0c;不重复造轮子(dont repeat yourself)"的原则&#xff0c;帮助用户构建web应用。 而 Django 它本身提供了一些全栈式的一些组件&#xff0c;包括了 ORM&#xff0c;模板引擎&#xff0c;表单…

信息学奥赛一本通 1449:【例题2】魔板

题目 1449&#xff1a;【例题2】魔板 分析 首先注意&#xff1a;输入是按顺时针给出的&#xff0c;但我们处理时需要按正常顺序排&#xff0c;可以用以下代码读入 string s(8, 0); // 初始化全零字符串 cin>>s[0]>>s[1]>>s[2]>>s[3]; cin>>…

你的完美主义:从缺陷到超能力

所属专栏&#xff1a;《逻辑辨证系列》 前情回顾&#xff1a; 《完美还是完成》&#xff08;一&#xff09;&#xff1a;完成还是完美—完成大于完美 时间、机会、情绪成本 先完成 … 本期&#xff1a; 《完美还是完成》&#xff08;二&#xff09;&#xff1a;你的完美主…