首页 > 其他分享 >25 服务接口的结构

25 服务接口的结构

时间:2023-05-04 15:35:19浏览次数:36  
标签:25 调用 服务 函数 中断 系统 接口 API

服务接口的结构:

Cosmos的API结构:文件类、进程类、内存类、时间类的API;

进入内核:

设备向 CPU 发送一个中断信号,CPU 接受到这个电子信号后,在允许响应中断的情况下,就会中断当前正在运行的程序,自动切换到相应的 CPU R0 特权级,并跳转到中断门描述符中相应的地址上运行中断处理代码。

 除了设备可以发送中断信号、应用软件也可以向CPU发送中断;软中断指令,如 int 255,这个常数表示CPU从中断描述符表中取得第几个中断描述符进入内核;

传递参数:

 int 指令提供了应用程序,进入了操作系统的内核函数的机制;还需要传递参数,告诉操作系统做什么;

参数传递的方式有两种:寄存器传递 或 保存在用户栈;RBX、RCX、RDX、RDI、RSI 这 5 个寄存器来传递参数,事实上一个系统服务接口函数不会超过五个参数;

RAX寄存器中保存着一个 系统服务号;在系统服务分发器中,会根据这个系统服务号调用相应的函数;

需要用c语言嵌入汇编的方式实现;用来解决参数传递和触发中断问题。并且还需要处理系统返回结果;API_ENTRY_PARE1 、API_ENTRY_PARE4等宏;

系统服务分发器:

中断数量有限,但是系统服务会随着系统功能的增加而增加,不能为每个系统服务都提供一个中断描述符;

系统服务分发器的作用:我们可以只使用一个中断描述符,通过系统服务号区分是哪个服务;

实现系统服务分发器:

其实系统服务分发器就是一个函数,由中端处理代码调用;系统中断处理的第一层汇编代码调用hal_syscl_allocator 中断处理框架函数,汇编主要是保存用户态CPU寄存器到内核栈中;

hal_syscl_allocator 中断处理框架函数调用krlservice函数;

 krlservice 函数:判断是否大于最大服务号;判断是否有服务接口函数;检查通过之后,调用相应的服务接口;

系统服务表:

服务入口函数指针保存在系统服务表中;

stkparame_t 结构保存的是内核栈中的参数;这个正是之前CPU寄存器压入内核栈中的参数;

hal_syscal_allocator 函数的第二个参数,正是RSP寄存器的值;转成stkparame_t 结构地址,就能提取参数;

osservicetab数组中存放的是服务接口函数;

系统服务实例:

应用程序开发者往往不是直接调用系统API,经常调用某个库达到目的;

时间库:

time库调用 api_time 系统api;

时间API接口:

因为库和API接口函数不同层次,应用程序可以直接调用api 接口函数;

api_time 函数:调用 API_ENTRY_PARE1函数,执行int 指令进入内核,开始运行时间服务代码;

内核态时间服务接口:

系统服务分发器会根据服务号从系统服务表中取出相应的函数并调用;

krlsvetable_time 函数:调用真正的时间服务函数 krlsve_time 函数,这个函数要放在系统服务表中 osservicetab 才可以;

实现时间服务:

krlsve_time 函数:把系统的时间读取出来,写入用户应用程序传入缓冲区,由于osktime 这个结构由其他代码自动更新,需要加锁访问;

系统服务函数的执行过程:

应用程序在用户空间中运行,调用库函数,库函数调用 API 函数执行 INT 指令,进入中断门,从而运行内核代码。最后内核代码一步步执行了相关服务功能,返回到用户空间继续运行应用程序。

 

标签:25,调用,服务,函数,中断,系统,接口,API
From: https://www.cnblogs.com/xuan01/p/17370203.html

相关文章

  • 售后服务管理系统如何打破售后难题?
    售后服务在企业后勤中占有重要地位,为了更好地完成售后管理工作,需要通过智能化手段,将任务分解到各个维修人员的手中,让每个维修人员能够快速高效完成。而企业在售后管理系统中设置的任务,可以有效帮助售后管理工单困难,提升工作效率。那么,售后服务管理系统如何打破售后难题?1.报修方式简......
  • 20 18 | 加解密服务平台:如何让敏感数据存储与传输更安全?
    你好,我是李智慧。在一个应用系统运行过程中,需要记录、传输很多数据,这些数据有的是非常敏感的,比如用户姓名、手机号码、密码、甚至信用卡号等等。这些数据如果直接存储在数据库,记录在日志中,或者在公网上传输的话,一旦发生数据泄露,不但可能会产生重大的经济损失,还可能会使公司陷入重......
  • C++黑马程序员——P251-254. 常用排序算法 sort,random_shuffle,merge,reverse
    P251.常用排序算法——sortP252....——random_shuffleP253....——mergeP254....——reverseP251.sort  1#include<iostream>2#include<vector>3#include<algorithm>4#include<functional>//用greater5usingnamespacest......
  • 河北稳控科技多通道振弦传感器无线采集仪发送数据到 TCP 服务器及远程修改参数
    河北稳控科技多通道振弦传感器无线采集仪发送数据到TCP服务器及远程修改参数 1、发送数据到TCP服务器参数配置(下列参数位于【参数配置】区域内的【自动模式参数】和【GPRS】面板内)数据发送方式:GPRSTCP数据包协议:字符串1.0TCP相关的其它参数可不进行配置,使用我们......
  • PM配置详解之四:维护和服务处理
    31.维护数值种类功能说明配置路径IMG->工厂维护和客户服务->维护和服务处理->基本设置->成本显示设置->维护数值种类业务示例配置步骤31.将成本元素分配给值分类功能说明配置路径IMG->工厂维护和客户服务->维护和服务处理->基本设置->成本显示设置->将成本元素分配给值分类业务......
  • PM配置详解之二:工厂维护和客户服务中心的主数据
    3.建立为用户状态授权的授权码功能说明用户状态管理的对象包括设备、通知单、维修工单配置路径IMG->工厂维护和客户服务->工厂维护和客户服务中的主数据->基本设置->建立为用户状态授权的授权码业务示例通知单用户状态授权码:为通知单的建立、处理、延期、完成分别设置授权码维......
  • SmartInitializingSingleton 特殊的Spring接口
    SmartInitializingSingleton接口是ApplicationContext对BeanFactory的增强功能。文章目录什么是SmartInitializingSingleton接口在什么时候起作用有什么用途什么是SmartInitializingSingleton接口SmartInitializingSingleton接口是ApplicationContext对BeanFactory的增强功能可......
  • MATLAB代码:基于储能电站服务的冷热电多微网系统双层优化配置
    MATLAB代码:基于储能电站服务的冷热电多微网系统双层优化配置关键词:储能电站共享储能电站冷热电多微网双层优化配置参考文档:《基于储能电站服务的冷热电多微网系统双层优化配置》完全复现仿真平台:MATLAB+CPLExID:1540664945025786......
  • 天气预报查询 API 提供个性化的天气服务的设计思路
    引言假设你是一个开发人员或公司,正在考虑开发一款天气应用程序,但你意识到市场上已经有很多竞争者在使用天气预报查询API来提供类似的服务,本文将一起探寻一些创新的方法来提高应用程序的竞争力。扩大竞争力的一些建议如果市面上已经有很多使用天气预报查询API的应用,您可以通......
  • 多通道振弦传感器无线采集仪发送数据到 TCP 服务器及远程修改参数
     多通道振弦传感器无线采集仪发送数据到TCP服务器及远程修改参数1、发送数据到TCP服务器参数配置(下列参数位于【参数配置】区域内的【自动模式参数】和【GPRS】面板内)数据发送方式:GPRSTCP数据包协议:字符串1.0TCP相关的其它参数可不进行配置,使用我们已经为设备......