当前位置: 首页 > article >正文

关于进程管理的实现过程

1.进程加载函数:负责将硬盘上的进程加载到指定内存位置。返回进程的入口地址如 jinchengjiazaihans2.cpu调用函数第一次调用时传入进程的运行入口地址将入口地址作为基地址写入中断寄存器栈指针寄存器cpu基地址寄存器等,cpu开始运行后面会通过切换上下文自动运行。如cpudiaoyonghanshu()3.内存管理函数主要给用户进程使用查找空闲内存返回首地址给加载函数用调用进程加载函数将进程加载到空闲内存中返回该进程的入口地址。让cpu调用函数调用。如neicunguanlihs()空闲内存可以使用结构体数组构建在得到总内存大小后减去内核已经占用的内存将剩下的内存分配到结构体数组的每个结构体中( 程序员手工划分内存 )进程管理的实现在主函数中 如main()定义进程结构体typedef struct{结构体内部元素} jinchengjgt进程结构体包含了进程的全部信息进入主循环 如while(true){创建进程结构体链表调用内存管理函数将进程加载入内存更新进程的结构体信息可以通过中断的方式不断的加入进程最后形成一个链表( 也可以用结构体数组实现 最好是全局变量)如进程1-进程2-进程3-.........-进程n.进入cpu调用过程:while( true ){保存内核态时cpu中的数据到内存为后面恢复用。获取进程结构体的信息调用cpu调用函数 运行该进程时间片到结束该进程的运行时间片通过时间钟中断实现cpu每次运行完一条指令都会去检测有没有时间钟中断信号。如果有就进行上下文切换。cpu会自动保存该进程当前信息到进程结构体也就是内核栈中进程结构体中保存了内核栈的起始地址具体的是通过栈指针自动完成。cpu去执行时间中断函数此函数会恢复中断发生前保存的内核态数据。链表指针到下个进程}}注空闲内存结构体内有空闲内存块的起始地址和结束地址块的大小等信息。其中地址可以给进程加载函数使用。进程加载函数通过文件在硬盘的位置信息进行加载。单核单任务一个cpu核运行一个进程进程结束再运行另外一个进程。单核多任务一个cpu核运行多个进程一个进程暂停去运行另外一个进程。进程就是一个个可以单独运行的程序。中断通过中断寄存器中的地址访问中断向量表。中断向量表结构体数组构建好后 通过lidt把结构体数组的首地址( 也就是数组名)放到中断寄存器中。lidt [idt, 256*8 - 1] // 参数表地址界限用户栈到内核栈的切换是通过tss中rsp0栈指针实现rsp0栈指针指向当前进程的内核栈。cpu通过任务寄存器tr找到tss中rsp0的内存地址然后根据这个rsp0压栈。上面是x86-64架构实现过程在risc架构中用户栈到内核栈的切换是通过csr实现当cpu进入某个进程运行时这时cpu的栈指针指向当前进程的栈也就是用户栈。当发生进程切换时也就是上下文切换这时需要的是内核栈。保存cpu信息到内核栈。这时就需要切换。如果直接压栈就会把cpu数据存到用户栈中内核栈中是空的就会导致进程崩溃。所以就需要栈切换。当发生进程切换时为了保存当前进程在cpu主模块的数据此时cpu不能运行任何指令否则会改掉主模块里的数据因此cpu会用其它模块来保存当前数据。也就是进行压栈。函数调用都会进行栈的操作有时为了避免栈的操作可以把代码直接放在函数调用处实现内核主程序最好不要有函数调用。注意栈指针。用户态的程序要想访问内核态里的函数 也就是系统内核API函数 可以通过软中断指令syscall进入内核态通过cpu里的特殊寄存器传API函数编号参数实现。发生软中断时cpu会去执行软中断函数软中断函数会恢复cpu的内核态数据通过API函数编号查找API函数表里函数的入口地址。然后去执行该函数通过寄存器返回结果给用户态程序。创建内核态的系统服务进程记录这些进程的入口地址(也就是入口函数的函数指针)。让内核主函数来运行这些进程。实现一些服务功能。因为这些服务进程运行在内核态所以可以直接调用内核里的API函数变量数组结构体等内核态内存数据。标准的输入输出就是键盘产生中断对应的中断函数将中断数据赋值给内核态变量然后内核态显示进程访问这个内核态变量将这变量的值显示在屏幕上。也可以是内核态显示进程设置一块内存作为显示内存只要内核态函数内核API函数内核态进程往这块内存里写数据内核态显示进程都能将这块内存里的数据显示在屏幕上。内核态显示进程里还可以加入显示模式变量是否显示变量等内核态函数和内核API函数通过修改这个变量来确定是字符模式还是像素模式是显示还是不显示等。有的外设先发中断信号中断函数通过I/O总线读取外设中的数据像usb鼠标。对于数据量比较大的用户态程序各个用户程序的数据传递大多是通过硬盘中转来实现。比如用户态显示程序在硬盘上设置一个特定格式的文件用户态显示程序就能将此文件里的数据显示到屏幕其它程序只需要往此文件里写数据就行。所谓内核态就是与内核主函数一起编译的代码。用户态就是单独编译的程序。内核态进程的入口地址是通过入口函数的函数指针实现用户态进程入口地址是通过查找空闲内存结构体数组中的起始地址来实现。内核的主函数就是对进程的管理也是系统内核的入口。建议不要写用户态进程有点难内核态的也少写。建议不要写窗口麻烦。

相关文章:

关于进程管理的实现过程

1.进程加载函数:负责将硬盘上的进程加载到指定内存位置。返回进程的入口地址如 jinchengjiazaihans()2.cpu调用函数,第一次调用时传入进程的运行入口地址,将入口地址作为基地址写入中断寄存器,栈指针寄存器&#xff0c…...

Modern Robotics 6

Modern Robotics 61 概念2 数值逆运动学1 概念3 闭链运动学1 概念 2 数值逆运动学 1 概念 3 闭链运动学...

从手动操作到智能辅助:3步掌握League Akari的终极游戏效率革命

从手动操作到智能辅助:3步掌握League Akari的终极游戏效率革命 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟对局…...

【Linux 实战 - 25】Reactor 事件驱动模型原理与实现

在高并发网络编程中,如何高效处理成千上万的连接是核心挑战。Reactor(反应器)模式作为一种经典的事件驱动设计模式,通过 I/O 多路复用技术实现了单线程(或多线程)高效处理多连接的目标,被广泛应…...

WorkshopDL:突破性多引擎架构重构Steam创意工坊生态体验

WorkshopDL:突破性多引擎架构重构Steam创意工坊生态体验 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 在当今游戏模组生态中,Steam创意工坊已成为玩家…...

CDK:云原生安全渗透测试的容器环境一体化工具解析

1. 项目概述:一个云原生时代的“瑞士军刀”如果你在云原生安全、渗透测试或者红队评估领域摸爬滚打过一段时间,一定会对“工具集”这个概念又爱又恨。爱的是,一个趁手的工具集能让你事半功倍,快速定位问题;恨的是&…...

【Linux 实战 - 26】轻量级 HTTP 服务器原理与 C 语言 Socket 实现

前言 HTTP 是互联网最核心的应用层协议,几乎所有网页、API、嵌入式 Web 控制都基于 HTTP 实现。本文从 HTTP 协议基础 讲起,使用 Linux C Socket 从零实现一个可运行、可扩展、轻量级 HTTP 服务器,适合学习网络编程、嵌入式 Web、后端原理。…...

AI智能体监控平台agentwatch:从可观测性到性能优化实战

1. 项目概述:一个面向AI智能体生态的监控与洞察工具最近在折腾AI智能体(Agent)相关的项目,发现一个挺有意思的现象:当你的智能体数量从几个增长到几十个甚至更多时,管理它们的状态、追踪它们的决策过程、分…...

Python自动化脚本断点续传下载实战:大文件处理完整指南

大家好,我是扣扣。今天来聊聊一个很实用的功能——断点续传下载。 为什么要关心断点续传? 你有没有遇到过这些情况: 下载一个大文件,下载到99%的时候网络断了,得从头再来 公司网络不稳定,几十MB的文件死活下载不下来 凌晨跑个定时任务下载数据,结果因为网络波动失败了…...

保姆级教程:手把手教你修改Material Studio的Perl交联脚本,适配你的自定义聚合物

深度定制Material Studio交联脚本:从环氧树脂到多元聚合物的Perl魔改指南 当你第一次在论文中看到那个神奇的环氧树脂交联脚本时,可能和我一样兴奋——终于不用手动跟踪每个反应位点了!但现实很快给了我们这些研究聚酰亚胺、聚氨酯等非环氧体…...

告别手动解析!用CANdb++制作DBC文件保姆级教程(附Intel/Motorola格式详解)

告别手动解析!用CANdb制作DBC文件保姆级教程(附Intel/Motorola格式详解) 在车载电子系统开发中,工程师们每天需要处理海量的CAN总线原始数据。这些以十六进制形式呈现的报文,就像一本没有词典的外语书籍——你能看到字…...

Taotoken模型广场在项目技术选型中的实际使用感受

Taotoken模型广场在项目技术选型中的实际使用感受 1. 模型广场的界面设计与信息组织 Taotoken模型广场采用分类清晰的布局设计,左侧导航栏按模型用途(如文本生成、代码补全、多模态等)和厂商进行分组。每个模型卡片展示关键信息&#xff1a…...

Reolink E1 Outdoor Pro 4K智能摄像头WiFi 6技术评测

1. Reolink E1 Outdoor Pro 4K智能安防摄像头深度评测作为一名长期测试各类安防设备的博主,我最近上手了Reolink最新推出的E1 Outdoor Pro 4K智能安防摄像头。这款产品最吸引我的地方在于它率先在消费级安防领域采用了WiFi 6技术——要知道目前市面上绝大多数同类产…...

秩序之舞——排序算法中的数字星河

一,引言 在计算机科学的世界里,排序是最基础、也最重要的核心算法之一。无论是日常开发中的列表数据整理、数据库查询的结果规整,还是电商平台商品价格、销量的智能排行,亦或是机器学习、大数据处理中的数据预处理环节&#xff0c…...

Docker生态资源精选列表:从入门到实战的完整指南

1. 项目概述:一个Docker生态的“藏宝图”如果你在容器技术领域摸爬滚打过一段时间,尤其是深度使用Docker,那你一定有过这样的经历:为了解决一个特定的问题,比如搭建一个高性能的日志收集栈,或者寻找一个轻量…...

租房党、学生党、居家党|2026年电钢琴按场景选购攻略,机型推荐

我发现很多新手在买电钢琴的时候,会陷入一个思维误区:只盯着价格和品牌,却完全没有思考过我会在哪里用它这个问题。结果要么买了个便携款放在家里嫌它太轻没质感,要么搬了台立式琴到宿舍发现根本没地方放。事实上,电钢…...

2026新手吉他选购指南:1000-1500 元热门吉他横评,初学者选哪把琴?

新手入门选吉他,1000-1500 元是兼顾性价比与使用体验的主流价位,这一区间的的四款吉他都是热门之选。几款琴各有侧重,有的胜在品控口碑,有的赢在价格亲民,但新手选琴的核心终究是材质稳定、手感友好、配套完善&#xf…...

基于RAG与向量搜索的本地语义文件搜索系统构建指南

1. 项目概述:当本地文件库遇上大语言模型如果你和我一样,电脑里塞满了各种文档、笔记、代码片段和PDF报告,每次想找点东西都得靠记忆或者全局搜索碰运气,那你一定理解那种“信息就在那里,但我就是找不到”的无力感。传…...

Redis分布式锁进阶第十五篇

Redis分布式锁进阶第十五篇:热点锁雪崩根治方案 分片隔离实战落地 大促峰值零卡顿优化一、本篇定位:高并发压垮Redis的最后解法前面十四篇,我们搞定了死锁、看门狗、主从丢锁、联锁乱序、监控巡检。第十五篇专门解决大促必现、排查最难、影…...

AntiDupl:如何用专业级图像去重工具高效管理你的数字资产

AntiDupl:如何用专业级图像去重工具高效管理你的数字资产 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因电脑中堆积如山的重复图片而感到困扰&a…...

Nuxt 学习笔记(三)

SEO 头部设置 基于 Unhead 提供 useHead 管理 <head>&#xff0c;也可在 nuxt.config.ts 的 app.head 中配置。 同时提供 useHeadSafe 来支持安全的头部修改策略 interface MetaObject {title?: string; // 文档标题titleTemplate?: string | ((title?: string) &…...

使用Taotoken聚合API为你的Node.js后端服务注入AI能力

使用Taotoken聚合API为你的Node.js后端服务注入AI能力 1. 统一接入多模型的技术方案 在现代Web应用开发中&#xff0c;智能对话功能已成为提升用户体验的重要组件。作为全栈开发者&#xff0c;我们经常面临模型选型与接入的挑战。Taotoken提供的OpenAI兼容API解决了这一痛点&…...

OpenWrt网易云音乐解锁插件:3分钟实现全屋音乐自由

OpenWrt网易云音乐解锁插件&#xff1a;3分钟实现全屋音乐自由 【免费下载链接】luci-app-unblockneteasemusic [OpenWrt] 解除网易云音乐播放限制 项目地址: https://gitcode.com/gh_mirrors/lu/luci-app-unblockneteasemusic 还在为网易云音乐中那些灰色的"无版权…...

从单片机到Linux内核:一文搞懂原子操作atomic_t的前世今生与实战

从单片机到Linux内核&#xff1a;一文搞懂原子操作atomic_t的前世今生与实战 在嵌入式开发领域&#xff0c;从单片机转向Linux内核开发就像从平静的湖泊驶向波涛汹涌的大海。习惯了在STM32上用__disable_irq()简单粗暴地解决并发问题的工程师&#xff0c;初次面对Linux内核的SM…...

豆包付费订阅背后,藏着一个反直觉的真相:给你顶配AI,你用得动吗?

豆包悄悄在App Store更新了付费订阅声明。68元/月&#xff0c;200元/月&#xff0c;500元/月&#xff0c;国产AI的"免费午餐"&#xff0c;正式宣告终结。这不是一条普通的商业新闻。字节扛了这么久&#xff0c;最终还是选了商业化。表面是商业压力&#xff0c;背后是…...

Arduino UNO SPE Shield:工业物联网通信解决方案

1. Arduino UNO SPE Shield项目概述作为一名长期从事工业自动化开发的工程师&#xff0c;当我第一次接触到Arduino UNO SPE Shield时&#xff0c;立刻意识到这款扩展板将为工业物联网(IIoT)项目带来革命性的便利。这款由Arduino官方推出的扩展板&#xff0c;通过Microchip LAN8…...

基于LangChain与Ollama的本地化网页摘要工具实践指南

1. 项目概述&#xff1a;一个基于本地大模型的网页摘要工具最近在折腾信息收集和整理&#xff0c;发现每天要看的网页和视频实在太多了&#xff0c;时间根本不够用。相信很多做研究、写报告或者单纯想高效获取信息的朋友都有同感。传统的摘要工具要么是云端服务&#xff0c;有隐…...

微信聊天记录解密终极指南:快速恢复被加密的珍贵数据

微信聊天记录解密终极指南&#xff1a;快速恢复被加密的珍贵数据 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾经因为手机损坏、微信重装或误删除而丢失了重要的聊天记录&#xff1f;当那些珍贵…...

多智能体协作平台AgentWall:从架构设计到工程实践

1. 项目概述&#xff1a;从“墙”到“智能体协作平台”的蜕变最近在开源社区里&#xff0c;一个名为agentwall/agentwall的项目引起了我的注意。乍一看这个标题&#xff0c;很容易让人联想到某种网络隔离或安全边界技术&#xff0c;毕竟“wall”这个词在技术领域通常指向防火墙…...

OpenUI深度解析:AI驱动界面生成从原理到实战部署

1. 项目概述&#xff1a;当AI学会“画”界面最近在跟几个做产品经理和前端开发的朋友聊天&#xff0c;大家不约而同地都在吐槽一件事&#xff1a;从想法到可交互的原型&#xff0c;这个链路太长了。产品经理用Figma画半天&#xff0c;交付给前端&#xff0c;前端还得吭哧吭哧地…...