小c学Linux(19)--进程管理理论详解

理论详解

本身二进制程序是存在硬盘上的,表现是一个个的可执行文件。

“这个文件是什么?”
“是磁盘上的存储空间,是存储在指定存储空间中的数据。”

“文件名是什么?”
“是引用,引用存储空间中的数据”

对linux可执行程序来讲,它的二进制格式叫ELF
ELF通常指的是可以在CPU上自我直接启动起来,程序有可执行入口#!,包含CPU原生态指令和数据,这就是ELF格式。

程序=指令+数据

”shell脚本本身不是二进制,而是纯文本文件,那为什么也能够执行?“
“shell脚本前#!/bin/bash指定了特定路经下的环境解释器”

进程的调度都是内核完成的,内核必须把(cpu)有限的资源分配给无限贪婪的进程上去,cpu切割成时间片,提供的计算能力是靠时间流逝完成的

内存是空间,区别于cpu时间片
/图1。|内核|用户|进程|

内存像硬盘一样,事先划分固定大小的内存块儿,内存页–页框(page frame)
/图二 | | | | |页框 | |

“每个进程最多能识别多大内存?”
“32位操作系统:4G”
“64位操作系统:4个4G”

注意,进程识别内存一般是虚拟内存比如4G,实际上物理内存只有512M,但对于每个进程都表现为4G的内存,1G用于内核,3G用于进程
/图三

这一切管理工作由内核在背后进行,内核怎么知道哪一个进程使用哪一段地址空间?而且映射了哪一段地址空间,并且如何让内核快速追踪每一个进程,如何知道每个进程和内存之间的关系?
“对于linux来说,所有用户空间中启动的进程除了init,都是由其父进程通过fork系统调用创建的。当子进程结束,父进程就会给它销毁。如果父进程比子进程先挂了,就用init销毁,init是所有进程的父进程”

在内核中有一种机制,可以追踪所有进程,为每一个进程创建一个进程对象(内核是用c语言写的,在c中是struct数据结构),每个进程对象包含了自己的进程id、进程名字等等信息。因而内核相当于为进程创建了一个进程信息库,用于追踪计算机上所有的进程,知道每个进程在干什么。linux文件系统中/proc目录是linux内核的伪文件系统,位于其目录下的都不是真正意义上的文件,它是内核信息的映射,包括进程等信息都在里面。

线程:一个进程内部有多个执行流。
cpu在某个时间点上只执行唯一的指令
如果只有一颗cpu,多线程并没有意义,只会使内核的管理更加麻烦
如果有多颗cpu,多颗cpu就能同时处理不同的指令,当系统指令非常多时,多线程能够充分利用多颗cpu工作,效率将大大提升

进程调度:内核的核心功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值