2021年8月13日

摘要: 交换空间 Linux 中的交换空间(Swap space)在物理内存(RAM)被充满时被使用。如果系统需要更多的内存资源,而物理内存已经充满,内存中不活跃的页就会被移到交换空间去。虽然交换空间可以为带有少量内存的机器提供帮助,但是这种方法不应该被当做是对内存的取代。交换空间位于硬盘驱动器上,它比进入 阅读全文
posted @ 2021-08-13 23:36 超人不会灰啊 阅读(286) 评论(0) 推荐(0)
 
摘要: 页表:是一个存放在物理内存中的数据结构,它记录了虚拟页与物理页的映射关系 在进行动态内存分配时,例如malloc()函数或者其他高级语言中的new关键字,操作系统会在硬盘中创建 或申请一段虚拟内存空间,并更新到页表(分配一个页表条目(PTE),使该PTE指向硬盘上这个新创 建的虚拟页),通过PTE建 阅读全文
posted @ 2021-08-13 23:07 超人不会灰啊 阅读(162) 评论(0) 推荐(0)
 
摘要: Linux环境下有操作系统决定,一般是8KB,8192kbytes,通过ulimit命令查看以及修改 Windows环境下由编译器决定,VC++6.0一般是1M Linux linux下非编译器决定栈大小,而是由操作系统环境决定,默认是8192KB(8M);而在Windows平台下 栈的大小是被记录 阅读全文
posted @ 2021-08-13 23:06 超人不会灰啊 阅读(1504) 评论(0) 推荐(0)
 
摘要: 1、栈区(stack)— 地址向下增长,由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的队列,先进后出。 2、堆区(heap)— 地址向上增长,一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链 阅读全文
posted @ 2021-08-13 22:58 超人不会灰啊 阅读(95) 评论(0) 推荐(0)
 
摘要: 通过这张图你可以看到,用户空间内存,从低到高分别是 7 种不同的内存段: 程序文件段,包括二进制可执行代码; 已初始化数据段,包括静态常量; 未初始化数据段,包括未初始化的静态变量; 堆段,包括动态分配的内存,从低地址开始向上增长; 文件映射段,包括动态库、共享内存等,从低地址开始向上增长(跟硬件和 阅读全文
posted @ 2021-08-13 22:56 超人不会灰啊 阅读(237) 评论(0) 推荐(0)
 
摘要: 中断 大家都知道,当我们在敲击键盘的同时就会产生中断,当硬盘读写完数据之后也会产生中断,所以,我 们需要知道,中断是由硬件设备产生的,而它们从物理上说就是电信号,之后,它们通过中断控制器发 送给CPU,接着CPU判断收到的中断来自于哪个硬件设备(这定义在内核中),最后,由CPU发送给内 核,有内核处 阅读全文
posted @ 2021-08-13 22:48 超人不会灰啊 阅读(105) 评论(0) 推荐(0)
 
摘要: 1、main函数的自然返回,return 2、调用exit函数,属于c的函数库 3、调用_exit函数,属于系统调用 4、调用abort函数,异常程序终止,同时发送SIGABRT信号给调用进程。 5、接受能导致进程终止的信号:ctrl+c (^C)、SIGINT(SIGINT中断进程) 阅读全文
posted @ 2021-08-13 22:43 超人不会灰啊 阅读(389) 评论(0) 推荐(0)
 
摘要: 父进程 已创建一个或多个子进程的进程 子进程 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别 是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的 理由是:因为一个进程的子进程可以多于一个, 阅读全文
posted @ 2021-08-13 22:42 超人不会灰啊 阅读(372) 评论(0) 推荐(0)
 
摘要: 1.通过signal(SIGCHLD, SIG_IGN)通知内核对子进程的结束不关心,由内核回收。如果不想让父进程挂 起,可以在父进程中加入一条语句:signal(SIGCHLD,SIG_IGN);表示父进程忽略SIGCHLD信号,该 信号是子进程退出的时候向父进程发送的。 2.父进程调用wait/ 阅读全文
posted @ 2021-08-13 21:09 超人不会灰啊 阅读(181) 评论(0) 推荐(0)
 
摘要: 主要分为时间局部性和空间局部性。 时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访 问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环) 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为 很多数据在 阅读全文
posted @ 2021-08-13 21:09 超人不会灰啊 阅读(304) 评论(0) 推荐(0)
 
摘要: 守护进程 指在后台运行的,没有控制终端与之相连的进程。它独立于控制终端,周期性地执行某种任务。Linux 的大多数服务器就是用守护进程的方式实现的,如web服务器进程http等 创建守护进程要点: (1)让程序在后台执行。方法是调用fork()产生一个子进程,然后使父进程退出。 (2)调用setsi 阅读全文
posted @ 2021-08-13 20:58 超人不会灰啊 阅读(78) 评论(0) 推荐(0)
 
摘要: 阅读全文
posted @ 2021-08-13 17:36 超人不会灰啊 阅读(109) 评论(0) 推荐(0)
 
摘要: 快表,又称联想寄存器(TLB) ,是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的 若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。 阅读全文
posted @ 2021-08-13 17:23 超人不会灰啊 阅读(2392) 评论(0) 推荐(0)
 
摘要: 30、终端退出,终端运行的进程会怎样? 终端在退出时会发送SIGHUP给对应的bash进程,bash进程收到这个信号后首先将它发给session下面的进 程,如果程序没有对SIGHUP信号做特殊处理,那么进程就会随着终端关闭而退出 31、如何让进程后台运行 阅读全文
posted @ 2021-08-13 17:09 超人不会灰啊 阅读(195) 评论(0) 推荐(0)
 
摘要: 28、内存交换是什么?有什么特点? 交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度) 换入:把准备好竞争CPU运行的程序从辅存移到内存。 换出:把处于等待状态(或CPU调度原则下被剥夺运行权力)的程序 阅读全文
posted @ 2021-08-13 16:58 超人不会灰啊 阅读(560) 评论(0) 推荐(0)
 
摘要: 由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间 分成为一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按照调用关系分段,首先 将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统将其调入覆盖区,替换覆 盖区中原有的段。 覆盖技 阅读全文
posted @ 2021-08-13 16:57 超人不会灰啊 阅读(346) 评论(0) 推荐(0)
 
摘要: 等待线程结束:int pthread_join(pthread_t tid, void** retval); 主线程调用,等待子线程退出并回收其资源,类似于进程中wait/waitpid回收僵尸进程,调用 pthread_join的线程会被阻塞。 tid:创建线程时通过指针得到tid值。 retva 阅读全文
posted @ 2021-08-13 16:55 超人不会灰啊 阅读(540) 评论(0) 推荐(0)
 
摘要: Eg:编译时只需确定变量x存放的相对地址是100 ( 也就是说相对于进程在内存中的起始地址而言的地 址)。CPU想要找到x在内存中的实际存放位置,只需要用进程的起始地址+100即可。 相对地址又称逻辑地址,绝对地址又称物理地址。 阅读全文
posted @ 2021-08-13 16:49 超人不会灰啊 阅读(226) 评论(0) 推荐(0)
 
摘要: 互斥锁(mutex) 互斥锁属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程A和B,它们分别运行在core 0和core 1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被 线程B所持有,那么线程A就会被阻塞,此时会通过上下 阅读全文
posted @ 2021-08-13 16:47 超人不会灰啊 阅读(428) 评论(0) 推荐(0)
 
摘要: 读写锁 多个读者可以同时进行读 写者必须互斥(只允许一个写者写,也不能读者写者同时进行) 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) 互斥锁 一次只能一个线程拥有互斥锁,其他线程只有等待 互斥锁是在抢锁失败的情况下主动放弃CPU进入睡眠状态直到锁的状态改变时再唤醒,而操作系 阅读全文
posted @ 2021-08-13 16:29 超人不会灰啊 阅读(290) 评论(0) 推荐(1)
 
摘要: 允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。 一个整型变量 count 记录在对数据进行读操作的进程数量,一个互斥量 count_mutex 用于对 count 加锁, 一个互斥量 data_mutex 用于对读写的数据加锁。 阅读全文
posted @ 2021-08-13 15:50 超人不会灰啊 阅读(75) 评论(0) 推荐(0)
 
摘要: 五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。 当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。 下面是一种错误的解法,如果所有哲学家同时拿起左手边的筷子,那么所有哲学家都在等待其它哲学家吃完并释放自己手中的筷子,导致死锁。 阅读全文
posted @ 2021-08-13 15:50 超人不会灰啊 阅读(318) 评论(0) 推荐(0)
 
摘要: 阅读全文
posted @ 2021-08-13 15:45 超人不会灰啊 阅读(103) 评论(0) 推荐(0)
 
摘要: 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。 这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程 阅读全文
posted @ 2021-08-13 15:44 超人不会灰啊 阅读(488) 评论(0) 推荐(0)
 
摘要: Linux几乎支持全部UNIX进程间通信方法,包括管道(有名管道和无名管道)、消息队列、共享内存、 信号量和套接字。其中前四个属于同一台机器下进程间的通信,套接字则是用于网络通信。 管道 无名管道 无名管道特点: 无名管道是一种特殊的文件,这种文件只存在于内存中。 无名管道只能用于父子进程或兄弟进程 阅读全文
posted @ 2021-08-13 15:39 超人不会灰啊 阅读(224) 评论(0) 推荐(0)
 
摘要: 名称及方式 管道(pipe):允许一个进程和另一个与它有共同祖先的进程之间进行通信 命名管道(FIFO):类似于管道,但是它可以用于任何两个进程之间的通信,命名管道在文件系统中有 对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建 消息队列(MQ):消息队列是消息的连接表,包括P 阅读全文
posted @ 2021-08-13 15:01 超人不会灰啊 阅读(334) 评论(0) 推荐(0)
 
摘要: 操作系统负责内存空间的分配与回收。 操作系统需要提供某种技术从逻辑上对内存空间进行扩充。 操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换。 操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰 阅读全文
posted @ 2021-08-13 12:18 超人不会灰啊 阅读(46) 评论(0) 推荐(0)
 
摘要: 1. 临界区 对临界资源进行访问的那段代码称为临界区。 为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。 2. 同步与互斥 同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。 互斥:多个进程在同一时刻只有一个进程能进入临界区。 3. 信号量 信号量(Semaph 阅读全文
posted @ 2021-08-13 12:17 超人不会灰啊 阅读(1762) 评论(0) 推荐(0)
 
摘要: 可以借助进程的页表将逻辑地址转换为物理地址。 通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M。进程未执行时,页表的始址和页表长度放在进程控制块(PCB) 中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。 注意:页面大小是2的整数幂 设页面大小为L,逻辑 阅读全文
posted @ 2021-08-13 11:50 超人不会灰啊 阅读(1557) 评论(0) 推荐(0)
 
摘要: 四个过程: (1)预编译 主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下 1、删除所有的#define,展开所有的宏定义。 2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。 3、处理“#include”预编译指令,将文件内 阅读全文
posted @ 2021-08-13 11:43 超人不会灰啊 阅读(306) 评论(0) 推荐(0)
 
摘要: 应该注意以下内容: 1.只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状 态,等待下一次调度。 2.阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 阅读全文
posted @ 2021-08-13 11:30 超人不会灰啊 阅读(321) 评论(0) 推荐(0)
 
摘要: 虚拟技术把一个物理实体转换为多个逻辑实体。 主要有两种虚拟技术:时(时间)分复用技术和空(空间)分复用技术。 多进程与多线程:多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占用处 理器,每次只执行一小个时间片并快速切换。 虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间, 阅读全文
posted @ 2021-08-13 11:20 超人不会灰啊 阅读(473) 评论(0) 推荐(0)
 
摘要: 1、首次适应算法 算法思想:每次都从低地址开始查找,找到第–个能满足大小的空闲分区。 如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链( 或空闲分[表),找到 大小能满足要求的第-一个空闲分区。 2、最佳适应算法 算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空 阅读全文
posted @ 2021-08-13 11:14 超人不会灰啊 阅读(1278) 评论(0) 推荐(0)