1、计算机是如何运行一个软件程序的?
每一个软件都有自己的二进制可执行文件(包含的大概就是机器码),操作系统会加载这个二进制可执行文件到内存中,开始执行。
可视化的操作系统会把软件界面展示到显示器,用户通过io设备,输入该操作系统、和该软件的各种命令。就可以完成操作。
如果是不可视的操作系统,那么还是一样,需要键入命令。
大概操作系统会通知控制器,去获取相应的指令。
操作系统会为每一个进程,分配一个独立的内存空间。如果软件中有多个线程,则线程的空间从其进程空间中划分。
如图:
2、操作系统是怎么管理软件的运行的呢?
按规定次数,不停的按动开关K,就可以完成计算。k就是人肉振荡器(发送脉冲)。
程序控制
一个用户程序的执行自始至终是在操作系统控制下进行的。一个用户将他要解决的问题用某一种程序设计语言编写了一个程序后就将该程序连同对它执行的要求输入到计算机内,操作系统就根据要求控制这个用户程序的执行直到结束。
操作系统控制用户的执行主要有以下一些内容:调入相应的编译程序,将用某种程序设计语言编写的源程序编译成计算机可执行的目标程序,分配内存等资源将程序调入内存并启动,按用户指定的要求处理执行中出现的各种事件以及与操作员联系请示有关意外事件的处理等。
用户操作软件的不同功能时,操作系统怎么告知硬件执行这些指令呢?
分析:首先,涉及到输入系统(键盘和鼠标进行一个操作),而这个操作目的软件是谁(操作系统一定有办法监控)?
用户执行了这个软件的某个指令,操作系统就会有办法得到这个指令在内存中的具体地址(操作系统在管理软件,一定能做到、或者有登记记录),
并把这个地址放到address count中(具体怎么放进去的?大概通过了cpu控制器)。
最后,在以上过程开始的时候(用户对应该软件的一个操作),操作系统随即发出一个中断指令,让cpu切换到该软件所在的进程。
进而,随着振荡器脉冲,根据ac中的地址,内存中的相应指令得以执行(每个命令对应的那些指令中都包含结束命令的指令)。
该软件指令的结果,操作系统当然会帮忙展示给用户。
3、那jvm是怎么执行的呢?
jvm也是一个软件,jvm会加载class文件到内存(class字节码文件就是jvm可以识别的字节码指令,但cpu不认识。java源码编译成class文件,而不同的平台需要安装不同的jvm)。
当我们执行一个java代码的方法时,操作系统和jvm各做了啥呢?
比如一个浏览器请求一个tomcat服务器上的页面吧。
(1)、服务器主机监听到tomcat软件的端口来了数据(这里可以叫做,命令)
(2)、操作系统会有办法拿到命令对应的程序、和内存中指令的地址,并且把地址放入到ac地址寄存器中,并且发出中断,让cpu切换到该程序。
jvm:大概这里轮到jvm了,jvm中有大概引擎程序(会把class二进制字节码指令解释为cpu认识的二进制机器码),
总之,最终jvm还是产出了cpu认识的机器码,交给cpu来执行(完成java软件的命令)。
但具体jvm工作的过程,不明。
(3)、操作系统会把该命令的执行结果,通过套接字,原路返回给浏览器客户端。