40.简述操作系统中调用过程?

讲过程之前,让我们先明白什么是调用?
但是讲调用之前又需要明白两个概念 核心态用户态
操作系统中的状态可以分为核心态(管态)和用户态(目态)。
程序有些是特权指令,特权指令是只能在核心态运行,不能够在用户态运行的指令。
再额外说一点:
其实微内核系统和宏内核系统就是核心态和用户态的划分不同。微内核只提供一些必要的系统服务,也就是处于核心态的系统服务少,只有一些必要的。宏内核把很多的系统服务都划分到了核心态,所以提供的服务比较多。
那划分核心态和用户态的意义是什么呢?
那么我们想一个问题,如果只有核心态没有用户态的情况下,会出现什么情况?
由于系统资源可能同时被多个应用程序访问,那么会出现文件、网络、各种硬件设备等资源竞争的情况,各个应用程序之间可能会产生冲突,对于恶意应用程序更可能导致系统奔溃。
所以对应用程序进行限制就出现了了用户态。
我们普通的应用程序基本都是处于用户态下运行。

那么操作系统调用过程是怎样的呢?
首先运行于用户态的应用程序发出系统调用请求,保护现场。一般都是给出一个中断指令(软中断),然后根据中断向量表查找系统调用表,最后在核心态执行系统调用处理程序(中断程序),最后返回应用程序,恢复现场。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android,JNI(Java Native Interface)是一种允许Java代码与本地代码(通常是C/C++代码)进行交互的机制。通过JNI,开发者可以在Java代码调用本地代码,实现对底层系统或其他原生库的访问和操作。 下面是简要的JNI调用过程: 1. 编写本地代码:首先,需要编写包含所需功能的本地代码,通常是用C或C++编写。这些本地代码将被编译成共享库(.so文件)。 2. 创建JNI接口:在Java代码,需要声明与本地代码对应的JNI接口。这些接口方法将与本地代码的函数进行绑定,以便在Java调用。 3. 生成头文件:使用Java Development Kit(JDK)的工具javah,生成包含JNI接口方法定义的头文件。 4. 实现JNI接口:在本地代码,需要实现JNI接口声明的方法。这些方法将提供与Java代码之间的桥梁,使得Java可以调用本地代码。 5. 编译本地代码:使用C/C++编译器将本地代码编译成共享库(.so文件)。 6. 将共享库加载到应用程序:在Android应用程序,可以使用System.loadLibrary()方法加载共享库。 7. 调用JNI方法:在Java代码,通过调用JNI接口声明的方法来调用本地代码。可以使用native关键字标记这些方法。 8. 运行应用程序:在应用程序运行时,当Java代码调用JNI方法时,将触发与本地代码的交互,完成相应的功能操作。 需要注意的是,JNI调用涉及到本地代码的编写和编译,因此需要对C/C++有一定的了解。此外,在JNI调用过程,需要注意内存管理和数据类型转换等问题,以确保安全性和正确性。 总结起来,JNI调用过程包括编写本地代码、创建JNI接口、生成头文件、实现JNI接口、编译本地代码、加载共享库、调用JNI方法等步骤,通过这些步骤可以实现Java代码与本地代码之间的交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值