OpenEuler学习笔记(二):用通俗的道理讲操作系统原理
用通俗的道理讲操作系统原理
-
基础概念类比
- 把OpenEuler操作系统想象成一个大型的工厂,这个工厂有各种各样的部门,每个部门都有自己的职责,共同协作来让整个工厂正常运转。
- 内核就像是工厂的管理中心,它负责指挥和协调所有的工作。
-
进程管理
- 进程就好比是工厂里的工人。每个工人(进程)都有自己的任务和工作状态。
- 当你在操作系统中运行一个程序,就相当于在工厂里安排一个新的工人开始工作。操作系统内核(管理中心)会记录这个工人(进程)的各种信息,比如这个工人(进程)是在忙碌干活(运行状态),还是在等待材料(阻塞状态),或者是在休息等待安排工作(就绪状态)。
- 调度器就像是工厂的工长,它决定哪个工人(进程)可以使用机器(CPU)来干活。例如,采用完全公平调度就像是工长按照每个工人的工作时间公平地分配机器使用时间,让每个工人都有机会干活,而不是有些工人一直占用机器,有些工人却没有机会。
- 进程间通信就像是工人之间的交流方式。比如共享内存就像是工人共用一个大的工作区域来传递工具和材料,消息队列就像是在工作区域设置一个信息板,工人可以在上面留下消息给其他工人,信号机制则像是一个工人通过广播来快速通知其他工人一些紧急情况。
-
内存管理
- 物理内存就像是工厂里的实际仓库空间,虚拟内存就像是给每个工人(进程)规划的一个虚拟的仓库空间。
- 当一个工人(进程)需要存放东西(数据)时,管理中心(内核)会从实际仓库(物理内存)中划分出一块地方或者把东西放到虚拟仓库(虚拟内存)里,并且通过一种记录方式(页表)来知道虚拟仓库里的东西实际放在哪里。
- 如果实际仓库(物理内存)满了,就像工厂的实际仓库空间不够用了,管理中心(内核)会把一些不常用的东西放到工厂外面的临时仓库(磁盘交换空间),等需要的时候再搬回来。
-
文件系统管理
- 文件系统就像是工厂的文件柜,用来存放各种文件(数据)。
- 虚拟文件系统(VFS)就像是文件柜的总目录,它不管文件柜是木制的(ext4文件系统)还是金属制的(XFS文件系统),它提供一个统一的查找方式。
- 以ext4文件系统为例,就像是一种特定类型的文件柜,每个文件都有自己的标签(inode),上面记录着文件的各种信息,比如文件大小、什么时候创建的等,文件的数据就像是文件柜里的文件内容,存放在一个个小格子(数据块)里。
-
设备驱动管理
- 设备驱动就像是工厂里的机器操作员。每个机器(硬件设备)都有对应的操作员(设备驱动)。
- 当有新的机器(硬件设备)进入工厂,机器操作员(设备驱动)会向管理中心(内核)报告,说自己可以操作这个机器,并且告诉管理中心(内核)机器怎么用,需要什么资源。
- 中断处理就像是机器出现紧急情况时的处理方式。当机器发出警报(中断),管理中心(内核)会暂停正在进行的工作,找到对应的机器操作员(设备驱动)来处理这个紧急情况,处理完后再继续原来的工作。
openeuler操作系统组成原理
-
内核层
- 进程管理子系统
- 进程是程序的执行实例,OpenEuler的进程管理负责创建、调度和终止进程。它采用了多进程调度策略,例如完全公平调度(CFS)。CFS基于红黑树结构来管理进程,按照进程的虚拟运行时间来调度。比如,假设有两个进程A和B,A已经运行了一段时间,B刚创建,由于B的虚拟运行时间短,在公平调度下会更优先得到CPU资源,这样保证了系统资源分配的公平性。
- 进程间通信(IPC)也是进程管理的重要部分。它提供了多种方式,如共享内存、消息队列和信号。共享内存允许不同进程访问同一块物理内存区域,这对于需要大量数据交换的进程很高效。例如,数据库系统中的多个进程可能通过共享内存来共享缓存数据。消息队列则是通过在内存中建立消息队列来实现进程间的消息传递,而信号主要用于进程间的异步通知,比如一个进程可以向另一个进程发送终止信号。
- 内存管理子系统
- 采用虚拟内存管理机制,将物理内存和磁盘空间结合。每个进程都有自己独立的虚拟地址空间,通过页表来实现虚拟地址到物理地址的映射。例如,当进程访问一个虚拟地址时,系统会通过多级页表查找对应的物理地址。同时,物理内存管理采用伙伴系统,将物理内存划分为大小为2的幂次方的块,根据内存请求分配和回收这些块。当物理内存不足时,会把部分内存页面交换到磁盘上的交换空间,利用类似LRU(最近最少使用)算法来决定交换哪些页面。
- 文件系统子系统
- 虚拟文件系统(VFS)是核心部分,它为不同的文件系统提供统一的接口。不管是ext4、XFS还是其他文件系统,上层应用程序和内核模块都通过VFS来操作文件。例如,当应用程序调用
read
系统调用时,会先经过VFS,VFS根据文件所在的实际文件系统类型,将操作转发给对应的文件系统驱动。具体的文件系统如ext4,它以inode(索引节点)和数据块来组织文件,inode存储文件的元数据,如大小、权限、创建时间等,数据块存储文件的实际内容。
- 虚拟文件系统(VFS)是核心部分,它为不同的文件系统提供统一的接口。不管是ext4、XFS还是其他文件系统,上层应用程序和内核模块都通过VFS来操作文件。例如,当应用程序调用
- 设备驱动子系统
- 这是操作系统与硬件设备通信的桥梁。设备驱动模型允许设备驱动向内核注册自己,内核通过设备树来管理这些驱动。当一个新的硬件设备插入系统,设备驱动会检测到并与内核通信,内核根据设备类型分配资源并加载合适的驱动模块。例如,当插入一个USB鼠标时,USB设备驱动会识别这个鼠标,内核会为其分配中断资源,使鼠标能够正常工作。中断处理是设备驱动的重要功能,当硬件设备发出中断信号(如网卡收到数据包),内核的中断处理程序会暂停当前进程,调用相应的设备驱动中断处理函数来处理。
- 进程管理子系统
-
系统服务层
- 初始化系统服务:在系统启动过程中,
init
(或systemd
)进程发挥关键作用。它是系统中所有其他进程的祖先,负责启动各种系统服务和守护进程。例如,它会启动网络服务、文件系统挂载服务等。这些服务在后台运行,为系统的正常运行提供支持。 - 网络服务:包括网络协议栈的实现,如TCP/IP协议栈。它负责处理网络数据包的发送和接收,实现网络通信功能。例如,当用户通过浏览器访问网页时,网络服务会将HTTP请求打包成TCP/IP数据包发送出去,并接收服务器返回的数据包,经过解包等操作后将网页内容显示给用户。
- 安全服务:提供用户认证、访问控制等功能。通过用户账户和密码机制进行身份验证,只有经过认证的用户才能访问相应的系统资源。访问控制可以根据用户的权限设置,决定用户对文件、目录等资源的操作权限,如读写、执行等权限。
- 初始化系统服务:在系统启动过程中,
-
用户应用层
- 命令行工具:如
ls
、cp
、mkdir
等命令。ls
命令用于查看目录下的文件和目录信息,它通过调用系统的文件系统接口来获取信息并显示给用户。cp
命令用于复制文件,它会读取源文件的内容,通过文件系统接口将内容写入目标文件。 - 图形用户界面(GUI)应用程序:如果系统安装了图形界面环境,会有各种GUI应用,如文件管理器、文本编辑器等。文件管理器允许用户通过图形界面方便地浏览、操作文件和目录,它是基于系统的文件系统服务构建的。文本编辑器则用于用户创建和编辑文本文件,在编辑过程中,通过系统调用与内存管理等子系统交互,来存储和处理文本内容。
- 命令行工具:如
相关文章:
OpenEuler学习笔记(二):用通俗的道理讲操作系统原理
用通俗的道理讲操作系统原理 基础概念类比 把OpenEuler操作系统想象成一个大型的工厂,这个工厂有各种各样的部门,每个部门都有自己的职责,共同协作来让整个工厂正常运转。内核就像是工厂的管理中心,它负责指挥和协调所有的工作。 …...
ros2-7.5 做一个自动巡检机器人
7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求:做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息, 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…...
使用 `scanpy` 观察 `AnnData` 对象内部数据结构
以下是使用 scanpy 观察 AnnData 对象内部数据结构的步骤: 一、导入必要的库: import scanpy as sc二、读取 AnnData 对象: 假设你的 AnnData 对象存储在一个文件中,例如 adata.h5ad,你可以使用以下代码读取它: adata = sc.read(adata.h5ad)如果你已经有了 adata 对象…...
《CPython Internals》阅读笔记:p232-p249
《CPython Internals》学习第 13天,p232-p249 总结,总计 18 页。 一、技术总结 无。 二、英语总结(生词:1) 1.overhead (1)overhead: over-(“above”) head(“top part, uppermost section”) overhead的字面意思是:above…...
Java并发08 - 并发安全容器详解
并发容器详解 文章目录 并发容器详解一:不使用并发容器如何保证安全二:阻塞队列容器2:ArrayBlockingQueue2.1:内部成员2.2:put方法的实现2.3:take方法的实现 3:LinkedBlockingQueue3.1ÿ…...
抽奖系统(3——奖品模块)
1. 图片上传 application.properties 配置上传文件路径 ## 文件上传 ## # 目标路径 pic.local-pathD:/PIC # spring boot3 升级配置名 spring.web.resources.static-locationsclasspath:/static/,file:${pic.local-path} tip: 1. 如果访问的是本地路径,…...
36.centos7上安装python3.6.5、安装卸载依赖包
查看openssl的版本号,默认python3.6.5需要OpenSSL 1.0.2以上的版本支持。 监测安装好的python,是否可以正确导入ssl和_ssl包 pip3安装依赖包 通过Pycharm工具导出requirements.txt文件 查看/usr/bin/目录下的软连接 pip3, python...
微透镜阵列精准全检,白光干涉3D自动量测方案提效70%
广泛应用的微透镜阵列 微透镜是一种常见的微光学元件,通过设计微透镜,可对入射光进行扩散、光束整形、光线均分、光学聚焦、集成成像等调制,进而实现许多传统光学元器件难以实现的特殊功能。 微透镜阵列(Microlens Array&#x…...
nature genetics | scATAC-seq预测scRNA-seq,识别影响基因表达的新染色质区域
–https://doi.org/10.1038/s41588-024-01689-8 Single-cell multi-ome regression models identify functional and disease-associated enhancers and enable chromatin potential analysis 研究团队和单位 Christina S. Leslie–Memorial Sloan Kettering Cancer Center …...
简述mysql 主从复制原理及其工作过程,配置一主两从并验证。
MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作。 MySQL主从同步是基…...
Java API:封装自定义响应类
本文介绍 Web 服务开发中自定义响应,涵盖标准 HTTP 响应状态码局限性、自定义响应价值、设计原则与实现、在 Spring Boot 项目应用、与其他响应格式对比总结及应用场景。 1. 标准HTTP响应与自定义响应 1.1标准HTTP响应状态码 在 Web 服务开发中,HTTP…...
【Unity3D】利用Hinge Joint 2D组件制作绳索效果
目录 一、动态绳索 (可移动根节点) 二、静态绳索 三、利用Skinning Editor(Unity2022.3.15f1正常使用) 四、注意事项 一、动态绳索 (可移动根节点) 动态绳索 DynamicRope空物体 Anchor和whitecircle是相同位置的物体ÿ…...
vim练级攻略(精简版)
vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格,tab&am…...
嵌入式硬件篇---PID控制
文章目录 前言第一部分:连续PID1.比例(Proportional,P)控制2.积分(Integral,I)控制3.微分(Derivative,D)控制4.PID的工作原理5..实质6.分析7.各种PID控制器P控…...
技术洞察:C++在后端开发中的前沿趋势与社会影响
文章目录 引言C在后端开发中的前沿趋势1. 高性能计算的需求2. 微服务架构的兴起3. 跨平台开发的便利性 跨领域技术融合与创新实践1. C与人工智能的结合2. C与区块链技术的融合 C对社会与人文的影响1. 提升生产力与创新能力2. 促进技术教育与人才培养3. 技术与人文的深度融合 结…...
C语言程序设计之小系统
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 系统说明 1.1 系统概述 1.2 功能模块总体设计详细设计 3.1 程序中使用的函数 3.2各类问…...
pyinstaller : 无法将“pyinstaller”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
pyinstaller : 无法将“pyinstaller”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1pyinstaller --onefile --windowed 过年烟花.py~~~~~~~~~~~ …...
接口传参 data格式和json格式区别是什么
接口传参 data格式和json格式区别是什么 以下是接口传参 data 格式和 JSON 格式的区别: 定义和范围 Data 格式: 是一个较为宽泛的概念,它可以指代接口传递参数时所使用的任何数据的组织形式。包括但不限于 JSON、XML、Form 数据、纯文本、二进…...
ClickHouse 入门
简介 ClickHouse 是一个列式数据库,传统的数据库一般是按行存储,而ClickHouse则是按列存储,每一列都有自己的存储空间,并且只存储该列的数值,而不是存储整行的数据。这样做主要有几个好处,压缩率高&#x…...
Python自动化:基于faker批量生成模拟数据(以电商行业销售数据为例)
引言:个人认为,“造数据”是一个数据分析师的一项基本技能,当然啦,“造数据”不是说胡编乱造,而是根据自己的需求去构造一些模拟数据集,用于测试等用途,而且使用虚拟数据不用担心数据隐私和安全…...
3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南
OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南 OpenAI 的 GPT 系列语言模型,包括 GPT-4、GPT-3.5 和 GPT-3,已经成为自然语言处理领域的标杆。无论是文本生成、对话系统,还是自动化任务,开发者都可以通过 API 调用这些强大的模型来增强他们的应用。本文将为您详细介…...
【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用
前言 🌟🌟本期讲解关于spring 事务传播机制介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话…...
力扣203题—— 移除链表元素
题目 递归法使用 if(headnull){return null; }//假设remove返回后面已经去掉val值的链表 我们用head.next去存放他,接着我们要判断此时head head值是否等于val,如果等于我们就返回后继元素即可 head.nextremove(head.next,val); if(head.valval){return…...
Express中间件
目录 Express中间件 中间件的概念 next函数 全局中间与局部中间件 多个中间件 中间的5个注意事项 中间的分类 应用级中间件 路由级中间件 错误级中间件 Express内置中间件 express.json express.urlencoded 第三方中间件编辑 自定义中间件 Express中间件 中间…...
【AIGC】SYNCAMMASTER:多视角多像机的视频生成
标题:SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页:https://jianhongbai.github.io/SynCamMaster/ 代码:https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…...
模块化架构与微服务架构,哪种更适合桌面软件开发?
前言 在现代软件开发中,架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景,尤其在C#桌面软件开发领域,模块化架构往往更加具有实践性。本文将对这两种架构进行对比࿰…...
Ubuntu 24.04 LTS 安装 tailscale 并访问 SMB共享文件夹
Ubuntu 24.04 LTS 安装 tailscale 安装 Tailscale 官方仓库 首先,确保系统包列表是最新的: sudo apt update接下来,安装 Tailscale 所需的仓库和密钥: curl -fsSL https://tailscale.com/install.sh | sh这会自动下载并安装 …...
fgets、scanf存字符串应用
题目1 夺旗(英语:Capture the flag,简称 CTF)在计算机安全中是一种活动,当中会将“旗子”秘密地埋藏于有目的的易受攻击的程序或网站。参赛者从其他参赛者或主办方偷去旗子。 非常崇拜探姬的小学妹最近迷上了 CTF&am…...
C#高级:用Csharp操作鼠标和键盘
一、winform 1.实时获取鼠标位置 public Form1() {InitializeComponent();InitialTime(); }private void InitialTime() {// 初始化 Timer 控件var timer new System.Windows.Forms.Timer();timer.Interval 100; // 设置为 100 毫秒,即每 0.1 秒更新一次timer.…...
关于AI agent的学术论文实验部分:准确率,响应时间,用户满意度
关于AI agent的学术论文实验部分 在撰写关于AI agent的学术论文时,实验设计和实施是关键部分,仅搭建完成AI agent通常是不够的,需要通过严谨的实验来验证其性能、效果和创新性。以下以一个在智能客服场景中应用AI agent的例子,说明如何完成实验: 明确实验目的:确定通过实…...
消息队列实战指南:三大MQ 与 Kafka 适用场景全解析
前言:在当今数字化时代,分布式系统和大数据处理变得愈发普遍,消息队列作为其中的关键组件,承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品࿰…...
postgresql表分区及测试
本文主要采用list类型实现表分区,并对表分区数据进行查询对比,数据量6000万条以上,速度相差10倍以上。 一、创建表,以substationcode字段为ist类型表分区 CREATE TABLE "public"."d_population_partition" …...
VUE学习笔记(入门)1__创建VUE实例
核心步骤 <div id"app"><!-- 这里存放渲染逻辑代码 --><h1>{{ msg }}</h1><a href"#">{{count}}</a> </div><!-- 引入在线的开发版本核心包 --> <!-- 引入核心包后全局可使用VUE构造函数 --> <…...
STL—stack与queue
目录 Stack stack的使用 stack的模拟实现 queue queue的使用 queue的模拟实现 priority_queue priority_queue的用法 priority_queue的模拟实现 容器适配器 种类 Stack http://www.cplusplus.com/reference/stack/stack/?kwstack stack是栈,后入先出 stack的…...
pthread_create函数
函数原型 pthread_create 是 POSIX 线程(pthread)库中的一个函数,用于在程序中创建一个新线程。 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *a…...
suctf2025
Suctf2025 --2标识为看的wp,没环境复现了 所有参考资料将在文本末尾标明 WEB SU_photogallery 思路👇 构造一个压缩包,解压出我们想解压的部分,然后其他部分是损坏的,这样是不是就可以让整个解压过程是出错的从而…...
二、点灯基础实验
嵌入式基础实验第一个就是点灯,地位相当于编程界的hello world。 如下为LED原理图,要让相应LED发光,需要给I/O口设置输出引脚,低电平,二极管才会导通 2.1 打开初始工程,编写代码 以下会实现BLINKY常亮&…...
ESP8266-01S、手机、STM32连接
1、ESP8266-01S的工作原理 1.1、AP和STA ESP8266-01S为WIFI的透传模块,主要模式如下图: 上节说到,我们需要用到AT固件进行局域网应用(ESP8266连接的STM32和手机进行连接)。 ESP8266为一个WiFi透传模块,和…...
微服务学习:基础理论
一、微服务和应用现代化 1、时代的浪潮,企业的机遇和挑战 在互联网化数字化智能化全球化的当今社会,IT行业也面临新的挑战: 【快】业务需求如“滔滔江水连绵不绝”,企业需要更快的交付【变】林子大了,百色用户&…...
【c++继承篇】--继承之道:在C++的世界中编织血脉与传承
目录 引言 一、定义二、继承定义格式2.1定义格式2.2继承关系和访问限定符2.3继承后子类访问权限 三、基类和派生类赋值转换四、继承的作用域4.1同名变量4.2同名函数 五、派生类的默认成员构造函数5.1**构造函数调用顺序:**5.2**析构函数调用顺序:**5.3调…...
Java操作Excel导入导出——POI、Hutool、EasyExcel
目录 一、POI导入导出 1.数据库导出为Excel文件 2.将Excel文件导入到数据库中 二、Hutool导入导出 1.数据库导出为Excel文件——属性名是列名 2.数据库导出为Excel文件——列名起别名 3.从Excel文件导入数据到数据库——属性名是列名 4.从Excel文件导入数据到数据库…...
基于VSCODE+GDB+GDBSERVER远程单步调试设备篇(可视化界面)
目录 说明 配置方法 1)VSCODE必备插件 2)配置launch.json文件,用于GDB调试 调试步骤 目标板运行程序 1)已启动程序,通过attach方式进入调试 2)通过gdbserver启动时加载程序(程序路径根据实际情…...
【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)
单例模式 作用:单例模式的核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全,调用效率高 ,但是不能延迟加载懒汉式线程安全,调用效率不高,能延迟加载双重检…...
lvm快照备份
前提 数据文件要在逻辑卷上; 此逻辑卷所在卷组必须有足够空间使用快照卷; 数据文件和事务日志要在同一个逻辑卷上; 前提:MySQL数据lv和将要创建的快照要在同一vg,vg要有足够的空间存储 优点 几乎是热备&…...
PHP CRM售后系统小程序
💼 CRM售后系统 📺这是一款基于PHP和uniapp深度定制的CRM售后管理系统,它犹如企业的智慧核心,精准赋能销售与售后管理的每一个环节,引领企业步入精细化、数字化的全新管理时代。系统集成了客户管理、合同管理、工单调…...
ETL 数据抽取
ETL ETL 数据抽取 ETL(Extract, Transform, Load)是数据集成和处理的重要过程,其中数据抽取(Extract)是第一步,负责从各种数据源中提取数据。以下是ETL数据抽取的详细说明和常用工具: 1. 数据…...
FANUC机器人系统镜像备份与恢复的具体步骤(图文)
FANUC机器人系统镜像备份与恢复的具体步骤(图文) 镜像备份: 如下图所示,进入文件—工具—切换设备,找到插入的U盘UT1, 如下图所示,进入U盘目录后,创建目录,这里目录名称为11, 如下图所示...
MindsDB - 构建企业数据源 AI 对话
一、关于 MindsDB MindsDB是世界上最有效的解决方案,用于构建与混乱的企业数据源对话的AI应用程序。把它想象成图书管理员Marie Kondo。 github : https://github.com/mindsdb/mindsdb官网:https://www.mindsdb.com/官方文档:https://docs.…...
正则表达式(python版最全面,最易懂)
正则表达式 正则表达式英文称regular expression 定义:正则表达式是一种文本模式匹配的工具,用于字符串的搜索,匹配和替换。在excel,word以及其他的文本编辑器都可直接适配。 一、基本匹配规则 字面值字符:例如字母、数字、空格…...
QT 使用QTableView读取数据库数据,表格分页,跳转,导出,过滤功能
文章目录 效果图概述功能点代码分析导航栏表格更新视图表格导出表格过滤 总结 效果图 概述 本案例用于对数据库中的数据进行显示等其他操作。数据库的映射,插入等功能看此博客框架:数据模型使用QSqlTableModel,视图使用QTableView࿰…...