2021年8月13日

摘要: 交换空间 Linux 中的交换空间(Swap space)在物理内存(RAM)被充满时被使用。如果系统需要更多的内存资源,而物理内存已经充满,内存中不活跃的页就会被移到交换空间去。虽然交换空间可以为带有少量内存的机器提供帮助,但是这种方法不应该被当做是对内存的取代。交换空间位于硬盘驱动器上,它比进入 阅读全文
posted @ 2021-08-13 23:36 超人不会灰啊 阅读(241) 评论(0) 推荐(0) 编辑
 
摘要: 页表:是一个存放在物理内存中的数据结构,它记录了虚拟页与物理页的映射关系 在进行动态内存分配时,例如malloc()函数或者其他高级语言中的new关键字,操作系统会在硬盘中创建 或申请一段虚拟内存空间,并更新到页表(分配一个页表条目(PTE),使该PTE指向硬盘上这个新创 建的虚拟页),通过PTE建 阅读全文
posted @ 2021-08-13 23:07 超人不会灰啊 阅读(137) 评论(0) 推荐(0) 编辑
 
摘要: Linux环境下有操作系统决定,一般是8KB,8192kbytes,通过ulimit命令查看以及修改 Windows环境下由编译器决定,VC++6.0一般是1M Linux linux下非编译器决定栈大小,而是由操作系统环境决定,默认是8192KB(8M);而在Windows平台下 栈的大小是被记录 阅读全文
posted @ 2021-08-13 23:06 超人不会灰啊 阅读(1251) 评论(0) 推荐(0) 编辑
 
摘要: 1、栈区(stack)— 地址向下增长,由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的队列,先进后出。 2、堆区(heap)— 地址向上增长,一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链 阅读全文
posted @ 2021-08-13 22:58 超人不会灰啊 阅读(72) 评论(0) 推荐(0) 编辑
 
摘要: 通过这张图你可以看到,用户空间内存,从低到高分别是 7 种不同的内存段: 程序文件段,包括二进制可执行代码; 已初始化数据段,包括静态常量; 未初始化数据段,包括未初始化的静态变量; 堆段,包括动态分配的内存,从低地址开始向上增长; 文件映射段,包括动态库、共享内存等,从低地址开始向上增长(跟硬件和 阅读全文
posted @ 2021-08-13 22:56 超人不会灰啊 阅读(206) 评论(0) 推荐(0) 编辑
 
摘要: 中断 大家都知道,当我们在敲击键盘的同时就会产生中断,当硬盘读写完数据之后也会产生中断,所以,我 们需要知道,中断是由硬件设备产生的,而它们从物理上说就是电信号,之后,它们通过中断控制器发 送给CPU,接着CPU判断收到的中断来自于哪个硬件设备(这定义在内核中),最后,由CPU发送给内 核,有内核处 阅读全文
posted @ 2021-08-13 22:48 超人不会灰啊 阅读(88) 评论(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 超人不会灰啊 阅读(345) 评论(0) 推荐(0) 编辑
 
摘要: 父进程 已创建一个或多个子进程的进程 子进程 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别 是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的 理由是:因为一个进程的子进程可以多于一个, 阅读全文
posted @ 2021-08-13 22:42 超人不会灰啊 阅读(311) 评论(0) 推荐(0) 编辑
 
摘要: 1.通过signal(SIGCHLD, SIG_IGN)通知内核对子进程的结束不关心,由内核回收。如果不想让父进程挂 起,可以在父进程中加入一条语句:signal(SIGCHLD,SIG_IGN);表示父进程忽略SIGCHLD信号,该 信号是子进程退出的时候向父进程发送的。 2.父进程调用wait/ 阅读全文
posted @ 2021-08-13 21:09 超人不会灰啊 阅读(153) 评论(0) 推荐(0) 编辑
 
摘要: 主要分为时间局部性和空间局部性。 时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访 问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环) 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为 很多数据在 阅读全文
posted @ 2021-08-13 21:09 超人不会灰啊 阅读(255) 评论(0) 推荐(0) 编辑
 
摘要: 守护进程 指在后台运行的,没有控制终端与之相连的进程。它独立于控制终端,周期性地执行某种任务。Linux 的大多数服务器就是用守护进程的方式实现的,如web服务器进程http等 创建守护进程要点: (1)让程序在后台执行。方法是调用fork()产生一个子进程,然后使父进程退出。 (2)调用setsi 阅读全文
posted @ 2021-08-13 20:58 超人不会灰啊 阅读(59) 评论(0) 推荐(0) 编辑
 
摘要: 阅读全文
posted @ 2021-08-13 17:36 超人不会灰啊 阅读(94) 评论(0) 推荐(0) 编辑
 
摘要: 快表,又称联想寄存器(TLB) ,是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的 若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。 阅读全文
posted @ 2021-08-13 17:23 超人不会灰啊 阅读(1536) 评论(0) 推荐(0) 编辑
 
摘要: 30、终端退出,终端运行的进程会怎样? 终端在退出时会发送SIGHUP给对应的bash进程,bash进程收到这个信号后首先将它发给session下面的进 程,如果程序没有对SIGHUP信号做特殊处理,那么进程就会随着终端关闭而退出 31、如何让进程后台运行 阅读全文
posted @ 2021-08-13 17:09 超人不会灰啊 阅读(183) 评论(0) 推荐(0) 编辑
 
摘要: 28、内存交换是什么?有什么特点? 交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度) 换入:把准备好竞争CPU运行的程序从辅存移到内存。 换出:把处于等待状态(或CPU调度原则下被剥夺运行权力)的程序 阅读全文
posted @ 2021-08-13 16:58 超人不会灰啊 阅读(481) 评论(0) 推荐(0) 编辑
 
摘要: 由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间 分成为一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按照调用关系分段,首先 将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统将其调入覆盖区,替换覆 盖区中原有的段。 覆盖技 阅读全文
posted @ 2021-08-13 16:57 超人不会灰啊 阅读(288) 评论(0) 推荐(0) 编辑
 
摘要: 等待线程结束:int pthread_join(pthread_t tid, void** retval); 主线程调用,等待子线程退出并回收其资源,类似于进程中wait/waitpid回收僵尸进程,调用 pthread_join的线程会被阻塞。 tid:创建线程时通过指针得到tid值。 retva 阅读全文
posted @ 2021-08-13 16:55 超人不会灰啊 阅读(483) 评论(0) 推荐(0) 编辑
 
摘要: Eg:编译时只需确定变量x存放的相对地址是100 ( 也就是说相对于进程在内存中的起始地址而言的地 址)。CPU想要找到x在内存中的实际存放位置,只需要用进程的起始地址+100即可。 相对地址又称逻辑地址,绝对地址又称物理地址。 阅读全文
posted @ 2021-08-13 16:49 超人不会灰啊 阅读(194) 评论(0) 推荐(0) 编辑
 
摘要: 互斥锁(mutex) 互斥锁属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程A和B,它们分别运行在core 0和core 1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被 线程B所持有,那么线程A就会被阻塞,此时会通过上下 阅读全文
posted @ 2021-08-13 16:47 超人不会灰啊 阅读(376) 评论(0) 推荐(0) 编辑
 
摘要: 读写锁 多个读者可以同时进行读 写者必须互斥(只允许一个写者写,也不能读者写者同时进行) 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) 互斥锁 一次只能一个线程拥有互斥锁,其他线程只有等待 互斥锁是在抢锁失败的情况下主动放弃CPU进入睡眠状态直到锁的状态改变时再唤醒,而操作系 阅读全文
posted @ 2021-08-13 16:29 超人不会灰啊 阅读(269) 评论(0) 推荐(1) 编辑