目录
1)低级语言
2)高级语言
1)低级语言 #离机器越近语言 #二进制机器指令 #汇编语言 #ADD,R0,R1,ST... 2)高级语言 #离近人类越近的自然语言 #编译型语言 #c,c++,go... #解释型语言 #c#,python,java,swift,basic...
#是一个通用软件,运行在硬件上,不负责具体的工作,只是协调各个程序,将硬件资源所提供的硬件能力抽象成一个个系统调用(#system call),系统调用过于底层(由上层的程序员决定它的表现形式)
#将底层系统调用再次封装成更高级的接口,这个高级接口就是库(library),库没有程序的执行入口,只能被调用(API #Application Program Interface)
#在面向库的编程时,应用程序写出来的程序接口叫API,如果编译成二进制格式,这个接口叫ABI(应用二进制接口)
#执行用户代码的机制叫"用户空间",用户空间发起的系统调用,执行内核代码的机制叫"内核空间" (cpu运行在用户空间)
#程序可以通过系统调用直接运行在内核上(执行效率更高,权限更大)也可以通过库调用来完成(使用库调用进行编程可能更简单)
#程序必须有执行入口(#二进制文件开头处有一个特殊字符,可以标识这个二进制程序的执行格式,也称程序的魔数。如:"!/bin/bash")
进程的创建 #当运行"ls"命令时,就创建一个进程. #系统开机,先把内核代码放在cpu上运行,当内核接管一切后,就和硬件没关系了,内核负责启动进程,它会派出一个使者来管理进程,创建的第一个进程,该进程就叫初始化进程,后续用户空间的所有管理工作就右init这个使者来管。 #进程分子进程,和子子进程... #父进程由fork自身而来,内核都有一个系统调用,叫fork.父进程,需要创建子进程时需要向内核发起请求,子进程不能脱离父进程,需要共享内存空间,子进程有自己的ID,子进程需要修改进程空间数据时,父进程就复制自己的一份数据给子进程,这时子进程就可以修改空间数据,这种进制叫cow #子进程由父进程销毁 #子进程处理数据时,父进程以静默方式存在,等子进程执行完成时,子进程的使命也结束了,即退出。父进程继续执行其他任务
#cpu级别:
#cpu有4个级别的保户机制(同心圆的4个环) #0级环,特权级别,只有内核才能运行在特权模式下 #中间两环系统保留 #其他应用程序运行在最外环,任何时候应用程序是不能访问内存中处于0级别的区域(CPU的0级别会映射给内存的某一段处于保护的空间当中)
#当多个jobs运行时,cpu会分割成多个时间片,当一个程序使用1S时,暂停(保户现场的机制)在处理第二个程序的1s,两个程序交替执行。
#内存空间:
第一段:ROM,固化在主板上
第二段:载入内核(kernel space)
第三段:其他应用程序共享
#虚拟地址空间:每一个程序运行时,都假设自己有一个虚拟地址空间,32位系统为4G,64位系统即"2^64",真实情况下,一个程序其实只占用几M空间而已
进程:
就是运行程序的实例,它的生命周期就是程序的开始到结束。