2020-03-22

知识拓展
虽然写的都是代码,但是代码运行在哪个级别什么位置,还是需要做好定位,这样才心中有数。Linux和Windows都是宏内核,内核自己管理硬件软件资源,对外提供“系统调用”给程序员编程。
  操作系统按照一定的协议把我们写的程序加载进内存,为其分配内存等资源,让其诞生;然后程序自己管自己,自己运行;最后C/C++/Java的mian函数都能会返回,返回后这个程序就结束了(还可能有其他方式,进程被迫结束),所占用的资源(比如内存堆和栈、任务时间片、外设等)返还给了操作系统。1.1 Linux 环境 1 Linux系统调用   所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口获得操作系统内核提供的服务。   Linux/Unix 的设计策略将是内核空间与用户空间隔绝开,使得内核空间对象或资源“不能”被用户空间直接访问。用户能在用户空间操作用户自己的对象,如果需要使用内核资源,可以直接调用系统调用(system call)或者通过“库(比如C库),也可以叫APIs”间接地调系统调用。系统调用像一个屏障,它将内核空间与用户空间隔开。  因为核心态和用户态用的是两个不同的栈,切换时需要切换特权级别,并且不同的硬件平台(arm/ibm/intel)有不同的硬件栈指针(StackPointer)实现机制,所以系统调用的实现需要用到汇编语言,实现的功能包括切换SP、参数传递、上下文切换等。如果提到汇编怎么通过cpu寄存器传递参数,这些细节都有其标准,不必深究。如果提及StackPointer,stm32就有两个独立的StackPointer(SP),MSP与PSP。需要指出Linux用户空间、内核空间与中断是有区别的:用户空间和内核空间其实看上去就是运行在不同处理器特权级别上的普通程序(相对中断而言),只不过内核空间运行着整个软件系统的核心LinuxKernel,里面装的是正在运行的Linux Objects;中断程序一般针对硬件,短小而严谨,不能睡眠。  Linux系统调用非常精简(只有250个左右),它继承了UNIX系统调用中最基本和最有用的部分。这些系统调用按照功能逻辑大致可分为进程控制、进程间通信、文件系统控制、存储管理、网络管理、套接字控制、用户管理等几类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值