操作系统 基本概念

大端机、小端机

小端模式(Little-endian)[当下最常见]

数据低字节保存在内存低地址,数据高字节保存在内存的高地址中.大端模式则刚好相反.

大端模式(Big-endian)

数据的高字节保存在内存的低地址,低字节保存在内存的高地址中.

大端字节序与小端字节序

计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian).

操作系统中进程调度策略有哪几种?

先来先服务、优先级、时间片轮转、多级反馈(CFS).

进程和多线程

进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,!!![进程是系统进行资源分配和调度的一个独立单位]!!!.

线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

进程和多线程共享些什么?

代码段、进程当前前的目录、进程用户ID、组ID、信号处理器.

线程独有:

1.线程ID. 2.寄存器组的值. 3.线程占用的堆栈. 4.线程的信号屏蔽码. 5.线程优先级.

区别

二者主要去别在与是否拥有独立空间,进程有,线程没有.进程可以创建和撤销线程,反过来却不可以.

进程之间不会相互影响(故障隔离特性!),一个线程挂掉会导致整个进程挂掉.

关系

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

进程的内存布局

由低地址到高地址:

保留区 -> 代码和只读数据区(代码、字符串常量、宏定义) -> 数据段(全局变量、静态变量、初始化数据段、未初始化数据段) -> 堆区(低地址往高地址扩展//自下往上)-> 未使用空间 -> 文件映射区(动态库,共享内存) -> 未使用空间 -> 栈区(高地址往低地址扩展//自上往下) -> 内核区

保留区 -> 代码和只读区(代码、字符串常量、宏定义) -> 数据段(.bbs->.data) -> 堆区 ->为占用空间 -> 文件映射区 -> 为占用空间 -> 栈区 -> 内核区

.bbs 段(未赋初值)

定义但为赋初值的 全局变量、静态变量、常量

.data 段(已赋初值)

...

用户存储空间的角度看内存布局

代码区、文字常量区、动态存储区、静态存储区

动态存储区: 栈(函数返回地址、参数、局部变量、auto 声明的变量--其实也是非静态变量)和堆(new malloc alloc...).

静态存储区(存储和程序生命周期一样的变量): 全局变量、静态变量.

字节序 : 小端存小端 大端相反 字节序关乎值表示.