9.8 系统调用 (上)

9.8 系统调用 (上)

函数调用

自定义函数
C标准库
第三方库
框架
操作系统

ucos 多任务编程示例

void task1(void)
{
	while(1)
	{
		;
	}
}
void task2(void)
{
	for(;1;)
	{
		;
	}
}

OS_STK stack1[512];
OS_STK stack1[512];
int main(void)
{
	serial_init();
	board_init();
	OSInit();
	OSTaskCreate(task1,0,&stack1[511],3);
	OSTaskCreate(task2,0,&stack2[511],5);
	OSStart();
	return 0;
}

操作系统组件

网络通信
进程管理
文件系统
内存管理
协议栈
设备管理
GUI

安全问题

硬件安全访问
资源访问冲突
系统稳定运行
厨师+排号

权限管理

函数调用权限
内存访问权限
资源访问权限

Linux设计哲学

对不同的操作赋予不同的执行等级
内核态可访问任意系统资源,用户态程序访问权受限

操作系统特权

  1. 用户态
  2. 内核态
    系统调用:int 80h; swi
    内部异常
    外部中断

CPU的特权等级

  1. X86处理器
    ring0:内核代码:15条特权指令 + I/O + 内存访问特权
    ring1/ring2
    ring3:应用程序:I/O等系统资源访问受限
  2. ARM处理器
    特权模式:SYS、FIQ/IRQ、SVC、ABT、UND + 特权指令MSR、MRS等
    用户模式:USR

系统调用基本概念

操作系统提供给应用程序调用的接口:如厨师+叫号
用户态:应用程序运行状态,CPU执行特权级为3的用户代码
内核态:通过系统调用,CPU执行特权级为0的内核代码

系统调用流程

准备参数,调用系统调用API接口:open
通过软中断进入内核态、控制权交给OS、参数放在寄存器中
CPU从系统调用表中查询open系统调用对应的代码内存地址
从寄存器获取参数、执行open对应的相关内核代码
执行结束,将运行结果复制到用户态,返回用户态
CPU执行用户态代码,继续在用户态执行

系统调用的优点

  1. 简化应用程序开发
    为应用程序提供一个统一的硬件抽象接口
    分离了用户程序和内核驱动的开发
  2. 权限管控,保证了系统的稳定和安全
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值