狭义的操作系统可以认为就是内核,比如Linux内核。广义的操作系统则包括内核和一系列应用软件,比如Linux内核+编辑器vim+编译器gcc+命令行解释器(shell)等,通常称为GNU/Linux。
源代码https://github.com/torvalds/Linux
uname -r 可以看到内核版本
然后就可以在github上搜对应的代码了:
最新的已经是6.1版本了。rc的意思是Release Candidate。
内核提供服务。其逻辑就跟企业里一个团队提供的服务一样,你提供服务,说白了就是提供接口,别人调用你的接口。
那么内核的接口是什么?就是一些列函数声明,开发者可以直接调用。这些函数就是所谓的【系统调用】,直接称其为【内核接口】就可以了,为啥要单起一个名字呢?是因为他跟一般的接口的运行方式差别比较大吧,也就是系统调用会进入内核态。
but,实际上开发者也不会直接调用系统调用,而是通过库函数实现的。
实际的步骤是:
调用并进入库函数》系统调用号存放》触发中断进入内核态》调用中断处理程序(也就是系统调用)》中断处理程序返回》中断返回》库函数完成。
关于用高级语言写内核:内核本质上是一组系统调用的实现,或者说是一组中断处理程序的实现,或者说是cpu可以执行的二进制指令的实现,我们用c语言而不是汇编去实现实现这些指令,就是为了借助编译器的力量去更方便的实现二进制指令,同样的,我们现在可以考虑使用比C语言更加高级的语言去实现这些(或者更新的系统调用)二进制指令(借助其他编译器)。
参考 https://t.cj.sina.com.cn/articles/view/1746173800/68147f6801900ztou?cre=tianyi&mod=pctech&loc=5&r=0&rfunc=79&tj=cxvertical_pc_tech&tr=12
编译器和内核的关系:互相递进,当前的编译器和内核组合,可以编译出更新的内核。
参考 https://www.jianshu.com/p/a79d126c63e2, https://www.cnblogs.com/wang_yb/p/3899439.html