
面试前基础知识整理
sheng_max
这个作者很懒,什么都没留下…
展开
-
进程间通信
Linux进程间有六种通信方式,分别是:管道(pipe),消息队列,共享内存,信号量,套接字,信号。 进程间通信(IPC,InterProcess Communication)是指进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。因为每个进程都有独立的用户地址空间和共享内核地址空间。所以两个进程通信时,需要将数据先给内核,这样,其他的进程才能原创 2016-08-25 10:33:25 · 255 阅读 · 0 评论 -
Linux内存管理
32位操作系统管理4G内存空间。操作系统将这4G的内存空间划分为两部分,分别是低地址的3G空间(用户空间)和高地址的1G空间(内核空间),用户空间供用户进程使用,内核空间供内核使用。这样做的好处是将用户进程和内核进程分开,使内核进程不受用户进程的影响,使操作系统正常平稳运行。如果不将用户进程和内核进程分开,创建足够多的用户进程,会慢慢占满内存,使操作系统无法正常运行导致死机。而将用户空间和内核空间分原创 2016-09-17 21:59:35 · 237 阅读 · 0 评论 -
进程/线程知识总结
程序:存储在存储器中,用编程语言写好,经过预处理,编译,汇编,链接成的二进制代码。进程:正在运行的程序。多进程:为了提高CPU的利用率,在某进程遇到阻塞时,CPU能够不必等待该阻塞的进程而去执行别的进程,使CPU一直处于忙碌状态,提出了多进程。PCB:CPU在切换进程前,会将当前进程的状态信息、数据信息保存在该进程的PCB中。通过调度算法来实现进程间的切换。调度算法有:一、先来先服务。二、原创 2016-09-17 17:16:39 · 321 阅读 · 0 评论 -
I/O控制方式
I/O指输入输出端口 1. 轮训方式:CPU不断地询问I/O端口是否忙,若不忙,则执行输入输出操作,若忙,则不断询问。 2. 中断处理:若I/O端口需要进行数据读写操作时,给CPU发送一个中断信号,CPU中断当前任务转而执行I/O端口的输入输出任务,完成后,CPU继续执行刚才未执行完的任务。 3. 直接内存存取(DMA:Direct Memory Access):DMA控制器控制内存与设备之间原创 2016-09-03 10:04:56 · 350 阅读 · 0 评论 -
进程调度算法
先来先服务(FCFS):直接从就绪队列中取出进程为其分配处理机。短作业优先:在就绪队列中选出估计运行时间最短的进程优先为其分配处理机。抢占式优先调度算法:当有更高优先级进程进入就绪队列,则立即停止当前进程运行而将处理机优先分配给改更高优先级进程。非抢占式优先调度算法:当有更高级优先级进入就绪队列,等待当前进程执行完毕后再将处理机分配给该更高优先级进程。高响应比优先调度算法:这个算法可以使进程原创 2016-09-02 17:04:06 · 447 阅读 · 0 评论 -
页面置换算法
页面置换是因为CPU要访问的页面不在内存中,而存放页面的内存又满了,我们需要将磁盘swap区需要用的页面和内存中不用的页面进行置换,因此,才有了页面置换算法。 1. 先进先出置换算法(FIFO:First In First Out):先调入到内存的页面优先置换。 2. 最久未使用算法(LRU:Least Recently Used):将调入到内存的页面插入到页面队列中,当页面命中,则将改页面插入原创 2016-09-02 15:33:13 · 670 阅读 · 0 评论 -
socket通信中用到的函数介绍
客户端和服务端利用socket来通信,应分别写出客户端程序和服务器程序: 不管是在客户端和服务器端,需要添加两个头文件,# include <sys/socket.h>因为socket通信用到的相关函数在其中。 # include <netinet/in.h> 因为要用到struct sockaddr_in数据结构。 客户端: 1. 用socket函数来创建一个套接字,介绍下socket函数。原创 2016-09-01 11:02:15 · 814 阅读 · 0 评论 -
C++文件处理
C++要处理函数,首先要添加头文件# include ,这里边定义了类ofstream,ifstream。ofstream用来写操作,是将内存中的数据写出到文件中,ifstrea是将文件中的数据读入到内存中。ifstream和ofstrea对象调用open()和close()函数来打开和关闭文件。open函数的形式为void open(const char * filename, int mode,原创 2016-08-30 17:39:04 · 359 阅读 · 0 评论 -
C++基础知识整理(2)
访问限定符:public, protected, private。不考虑继承,在类中,protect和private的效果是一样的。对象成员:某类的对象作为另一个类的数据成员,该数据成员叫做这个类的对象成员。某类中有对象成员,实例化该类时,先调用对象成员的构造函数,再调用该类的构造函数;销毁该类对象时,先调用该类对象的析构函数,在调用对象成员的析构函数。深拷贝:拷贝构造函数需要在堆中实例化对象原创 2016-09-10 14:28:44 · 279 阅读 · 0 评论 -
排序算法--冒泡排序,归并排序,快速排序
冒泡排序: 属于交换排序的一种。 很好理解的交换排序是这样的:for (int i = 0; i < n; ++i) for (int j = i+1; j < n; ++j) { if (nums[i] > nums[j]) swap(nums[i], nums[j]) }这个算法的逻辑是从头到尾扫描元素,将这个元原创 2016-08-29 18:01:46 · 483 阅读 · 0 评论 -
指针函数和函数指针
指针函数是指: 返回值类型为指针的函数。这个很好理解,我们写了一个函数,返回值是指针,我们就称这种形式为指针函数(侧重点在后边的名词“函数”),形如:int * func(int a, int b),这个东西就是一个指针函数。 函数指针: 函数指针,侧重点是“指针”,表明它的本质是一个指针,不过这个指针指向了一个函数。函数指针定义形式为:int (*pFunc)(int a,原创 2016-08-29 16:17:30 · 342 阅读 · 0 评论 -
Linux虚拟内存
Linux采用虚拟段页式存储方式来管理内存,程序的基本逻辑存储单元,也可以说是程序段。Linux中有四个段,代码段,数据段,BSS段,堆栈段。虚拟地址从低到高依次是:代码段,数据段,BSS段,堆栈段。其中代码段为程序本身(二进制指令),数据段为代码中初始化了的全局变量和静态变量,BSS段为为初始化的全局变量和静态变量,堆为程序员申请的内存空间,栈是编译器用来存放函数局部变量,参数等数据的位置。将程序原创 2016-08-27 15:13:12 · 474 阅读 · 0 评论 -
三次握手四次挥手笔记
TCP/IP协议的三次握手(建立连接过程):1.首先,客户机制造一个随机序列seq=J,并将其与一个SYN消息一同发给服务器,客户机进入SYN_SENT状态。 2.服务器接收SYN消息,表示服务器知道客户机想要与其建立连接,此时服务器制造一个随机序列seq=K,并将ack序列设置为 J+1,将两个序列和ACK、SYN标志一同发给客原创 2016-08-22 16:05:12 · 341 阅读 · 0 评论 -
Linux常见锁比较--自旋锁、互斥锁、信号量、临界区
自旋锁(SpinLock):锁的目的是为了保护共享资源,实现线程同步。自旋锁区别于其他锁的地方在于若某线程在未获得锁时将不断的询问(判断)自旋锁保持者是否释放了锁(获取锁操作将自旋在那里,不断地申请获取,直到自旋锁保持者释放了锁),因此比较适用于保持锁时间比较短的情况(CPU一直在空转)。需要注意的是:一个锁只能有一个保持着。互斥锁(Mutex): 某线程A获得互斥锁,可以访问共享资源,而当另一个原创 2016-08-23 15:36:27 · 4862 阅读 · 0 评论 -
c++基础知识整理(1)
函数的默认值从右往前写(也就是说函数的默认值,右侧必须都得有)。函数的默认值一般写在声明中,函数定义可不用写默认值(因为编译器的差别,有些在定义中默认值编译器不能识别,默认值写在声明中却能使所有编译器都识别)。函数重载的定义:在相同作用域下,拥有相同的函数名但函数的参数个数或参数类型不同的函数共称为函数的重载。编译器如何识别重载的函数:编译器在编译的时候,将重载函数的函数名修改为 函数名参数原创 2016-09-07 15:08:13 · 306 阅读 · 0 评论