2018年2月22日

关于c语言内存分配,malloc,free,和段错误,内存泄露

摘要: 1. C语言的函数malloc和free (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数 void * malloc(size_t size) 动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。 void free(void *ptr) 释 阅读全文

posted @ 2018-02-22 23:23 AlanTu 阅读(995) 评论(0) 推荐(0)

HR面 - 十大经典提问

摘要: 1、HR:你希望通过这份工作获得什么? 1)、自杀式回答:我希望自己为之工作的企业能够重视质量,而且会给做得好的员工予以奖励。我希望通过这份工作锻炼自己,提升自己的能力,能让公司更加重视我。 a、“我希望通过这份工作锻炼自己,提升自己的能力。”同学,公司又不是学校,是希望你过来干活的,学习的目的也是 阅读全文

posted @ 2018-02-22 23:20 AlanTu 阅读(791) 评论(0) 推荐(0)

一些面试题(一)

摘要: 语言相关 什么是displacement new? placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator 阅读全文

posted @ 2018-02-22 23:19 AlanTu 阅读(249) 评论(0) 推荐(0)

轻松搞定面试中的红黑树问题

摘要: 没有学习过红黑树的同学请参考: <<Introduction to Algorithms>> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structures 教你透彻了解红黑树 一、红黑树的介绍 先来看下算法导论对R-B Tree的介 阅读全文

posted @ 2018-02-22 23:17 AlanTu 阅读(824) 评论(0) 推荐(0)

轻松搞定面试中的“虚"

摘要: 提要 今天要整理的知识点是C++中有关虚的一切。 包括:虚函数,纯虚函数,虚基类,虚继承... 1.什么是虚函数,有什么作用? 在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。在类外定义虚函数时,不必再加virtual。该函数就是虚 阅读全文

posted @ 2018-02-22 23:17 AlanTu 阅读(179) 评论(0) 推荐(0)

static成员函数不能调用non-static成员函数

摘要: 1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-static成员的,包括成员函数和成员变量。 由于构造函数特殊性,它从无到有构造一个对象,因此调用它不需要 阅读全文

posted @ 2018-02-22 23:06 AlanTu 阅读(2610) 评论(0) 推荐(0)

Linux常见的进程调度算法

摘要: 进程调度:在操作系统中调度是指一种资源分配。 调度算法是指: 根据系统的资源分配策略所规定的资源分配算法。 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取 阅读全文

posted @ 2018-02-22 22:59 AlanTu 阅读(17588) 评论(0) 推荐(1)

linux page buffer cache深入理解

摘要: Linux上free命令的输出。 下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1 2 3 4 5 61 total u 阅读全文

posted @ 2018-02-22 22:39 AlanTu 阅读(1084) 评论(0) 推荐(0)

linux write系统调用如何实现

摘要: 在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面去,这个过程到底是怎么实现的呢? 这个奥秘就在于设备驱动程序的write实现中,这里我结合一些源代码来解释如何使得一个简简单单的w 阅读全文

posted @ 2018-02-22 22:33 AlanTu 阅读(5912) 评论(0) 推荐(0)

BIO与NIO、AIO的区别

摘要: IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待 阅读全文

posted @ 2018-02-22 22:19 AlanTu 阅读(398) 评论(0) 推荐(0)

Unix域套接字简介

摘要: 在Linux系统中,有很多进程间通信方式,套接字(Socket)就是其中的一种。但传统的套接字的用法都是基于TCP/IP协议栈的,需要指定IP地址。如果不同主机上的两个进程进行通信,当然这样做没什么问题。但是,如果只需要在一台机器上的两个不同进程间通信,还要用到IP地址就有点大材小用了。 其实很多人 阅读全文

posted @ 2018-02-22 21:58 AlanTu 阅读(8047) 评论(0) 推荐(3)

漫谈linux文件IO

摘要: 在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO。本篇文件打算详细全面,深入浅出。剖析文件IO的细节。从多个角度探索如何提高IO性能。本文尽量用通俗易懂的视角去阐述。不copy内核代码。 阐述之前,要先有个大视角,让我们站在万米高空,鸟瞰我们的 阅读全文

posted @ 2018-02-22 20:46 AlanTu 阅读(12033) 评论(0) 推荐(0)

LRU Cache

摘要: 一、什么是Cache 1 概念 Cache,即高速缓存,是介于CPU和内存之间的高速小容量存储器。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近CPU的频率。 当CPU发出内存访问请求时,会先查看 Cache 内是否有请求数据。 如果存在(命中), 阅读全文

posted @ 2018-02-22 20:20 AlanTu 阅读(858) 评论(0) 推荐(0)

网络编程中的read,write函数

摘要: 关于TCP/IP协议,建议参考Richard Stevens的《TCP/IP Illustrated,vol1》(TCP/IP详解卷1)。 关于第二层面,依然建议Richard Stevens的《Unix network proggramming,vol1》(Unix网络编程卷1),这两本书公认是U 阅读全文

posted @ 2018-02-22 19:43 AlanTu 阅读(832) 评论(0) 推荐(0)

进程间通信

摘要: 在用户应用程序在经常用到C库的进程间通信函数,实际上,这些进程间通信函数在内核中是通过系统调用好文件系统的机制实现的。 1 管道 管道是只用于连接读进程和写进程,以实现它们之间通信的共享文件。因而它又称共享文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道。而接 阅读全文

posted @ 2018-02-22 19:42 AlanTu 阅读(273) 评论(0) 推荐(0)

系统调用

摘要: Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。系统调用实际上是内核中的一些C函数,它们都以sys开头的,如sys_mkdir()。它们通过一个指令int 0x80(软中断)把控制权交给内核,即进入特权级执行。int 0x80指令会使“执行”跳转到系统调用在内核中定义的入口地址 阅读全文

posted @ 2018-02-22 19:40 AlanTu 阅读(316) 评论(0) 推荐(0)

模块机制

摘要: 模块是内核的一部分(通常是设备驱动程序),按需动态装入模块可以保证内核达到最小并且使内核非常灵活。一旦装入一个Linux内核模块,那么它就像任何标准的内核代码一样成为内核的一部分,具有相同的权限和职责。一方面凡是由内核“移出”的所有符号都可以在模块中引用;另一方面,除了这个特意移出的符号及系统调用外 阅读全文

posted @ 2018-02-22 19:38 AlanTu 阅读(442) 评论(0) 推荐(1)

其他文件系统

摘要: ramfs内存文件系统 ramfs是一个利用VFS自身结构而形成的内存文件系统。ranfs没有自己的文件存储结构,它的文件存储于page cache中,目录结构由dentry链表本身描述,文件则由VFS的inode结构本身描述。 /proc文件系统 /proc文件系统是个虚拟文件系统,它通过文件系统 阅读全文

posted @ 2018-02-22 19:37 AlanTu 阅读(216) 评论(0) 推荐(0)

EXT2 文件系统

摘要: 对文件系统而言,文件仅是一系列可读写的数据块。文件系统并不需要了解数据块应该放到物理介质上什么位置。这些都是设备驱动的任务。无论何时,只要文件系统需要从包含它的块设备中读取信息或数据,它就将请求底层的设备驱动读取一个基本块大小整数倍的数据块。EXT2文件系统将它所使用的逻辑分区划分成数据块组。每个数 阅读全文

posted @ 2018-02-22 19:36 AlanTu 阅读(2722) 评论(0) 推荐(0)

虚拟文件系统

摘要: Linux内核中的虚拟文件系统用来管理挂接各种具体文件系统。具体的文件系统可设计成可加载模块,在系统需要时进行加载。 挂载具体文件系统时,VFS读取它的超级块,得到具体文件系统的拓扑结构,并将这些信息映射到VFS超级块结构中。 当进程或shell命令访问目录和文件时,shell命令及应用程序分解成系 阅读全文

posted @ 2018-02-22 19:35 AlanTu 阅读(1069) 评论(0) 推荐(0)

内核同步机制

摘要: 内核中用于临界区保护下的互斥机制,它包括自旋锁、原子操作和信号量,三者保证了对临界资源访问的互斥型。 1.1 内核中的互斥机制 1.1.1 自旋锁 自旋锁用在多个CPU系统中。当一个线程在一个CPU上正使用资源,而另一个线程在另一个CPU上正忙等待这个资源的时候,就会用到自旋锁来保护临界资源。在单处 阅读全文

posted @ 2018-02-22 19:33 AlanTu 阅读(430) 评论(0) 推荐(0)

进程及进程调度

摘要: 1 .1 进程结构 每个进程都具有自己的属性,用一个task_struct数据结构来表示,它包含了进程的详细信息,主要有进程标识符(PID)、进程所占的内存区域、相关文件描述符、安全信息、进程环境、信号处理、资源安排、同步处理状态几个方面。 数组task包含指向系统中所有task_struct结构的 阅读全文

posted @ 2018-02-22 19:32 AlanTu 阅读(476) 评论(0) 推荐(0)

系统级I/O

摘要: 一、UNIX I/O 在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致 阅读全文

posted @ 2018-02-22 16:44 AlanTu 阅读(332) 评论(0) 推荐(0)

初探Linux进程管理机制

摘要: 一 、进程的概念和分类1.进程的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用同一个linux系统;多任务是指在Linux下可以同时执行多个任务,更详细的说,linux采用了分时管理的方法,所有的任务都放在一个队列中,操作系统根据每个任务的优先级为每个任务分配合适 阅读全文

posted @ 2018-02-22 16:40 AlanTu 阅读(1512) 评论(0) 推荐(0)

浅谈Linux的内存管理机制

摘要: 一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就 阅读全文

posted @ 2018-02-22 16:40 AlanTu 阅读(12371) 评论(0) 推荐(1)

如何恢复 Linux删除的文件

摘要: 原理及普通文件的恢复 要想恢复误删除的文件,必须清楚数据在磁盘上究竟是如何存储的,以及如何定位并恢复数据。本文从数据恢复的角度,着重介绍了 ext2 文件系统中使用的一些基本概念和重要数据结构,并通过几个实例介绍了如何手工恢复已经删除的文件。最后针对 ext2 现有实现存在的大文件无法正常恢复的问题 阅读全文

posted @ 2018-02-22 16:39 AlanTu 阅读(40496) 评论(0) 推荐(0)

Linux内核中锁机制之RCU、大内核锁

摘要: 在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核锁(BKL)。文章的最后对《大话Linux内核中锁机制》系列博文进行了总结,并提出关于目前Linux内核中提供的锁机制的一些基本使用观点。 十、R 阅读全文

posted @ 2018-02-22 16:37 AlanTu 阅读(4591) 评论(0) 推荐(0)

Linux内核中锁机制之完成量、互斥量

摘要: 在上一篇博文中笔者分析了关于信号量、读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题。 八、完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等待另一个执行单元完成某事后方可执行,它是一种轻量级机制。事实上,它即是为了完成进程间的同步而设计的, 阅读全文

posted @ 2018-02-22 16:36 AlanTu 阅读(1333) 评论(0) 推荐(0)

Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁

摘要: 在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障、读写自旋锁以及顺序锁的相关内容。下面首先讨论内存屏障的相关内容。 三、内存屏障 不知读者是是否记得在笔者讨论自旋锁的禁止或使能的时候,提到过一个内存屏障函数。OK,接下来,笔者将讨论内存屏障的具体细节内 阅读全文

posted @ 2018-02-22 16:35 AlanTu 阅读(2491) 评论(0) 推荐(0)

Linux内核中锁机制之信号量、读写信号量

摘要: 在上一篇博文中笔者分析了关于内存屏障、读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量、读写信号量的内容。 六、信号量 关于信号量的内容,实际上它是与自旋锁类似的概念,只有得到信号量的进程才能执行临界区的代码;不同的是获取不到信号量时,进程不会原地打转而是进入休眠等待状态。它的定义是in 阅读全文

posted @ 2018-02-22 16:35 AlanTu 阅读(629) 评论(0) 推荐(0)

Linux内核中锁机制之原子操作、自旋锁

摘要: 很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态。这其中包括了我们所熟知的SMP系统,多核间的相互竞争资源,单CPU之间的相互竞争,中断和进程间的相互抢占等诸多问题。 通常情况下,如图1所 阅读全文

posted @ 2018-02-22 16:34 AlanTu 阅读(2530) 评论(0) 推荐(0)

page_address()函数分析

摘要: 由于X86平台上面,内存是划分为低端内存和高端内存的,所以在两个区域内的page查找对应的虚拟地址是不一样的。一. x86上关于page_address()函数的定义在include/linux/mm.h里面,有对page_address()函数的三种宏定义,主要依赖于不同的平台:首先来看看几个宏的 阅读全文

posted @ 2018-02-22 16:33 AlanTu 阅读(3491) 评论(0) 推荐(0)

Linux内核jiffies简介

摘要: 在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; /***second***/susecond_t tv_usec;/***microsecond* 阅读全文

posted @ 2018-02-22 16:31 AlanTu 阅读(3393) 评论(0) 推荐(0)

pdflush机制

摘要: 在做进程安全监控的时候,拍脑袋决定的,如果发现一个进程在D状态时,即TASK_UNINTERRUPTIBLE(不可中断的睡眠状态),时间超过了8min,就将系统panic掉。恰好DB组做日志时,将整个log缓存到内存中,最后刷磁盘,结果系统就D状态了很长时间,自然panic了,中间涉及到Linux的 阅读全文

posted @ 2018-02-22 16:27 AlanTu 阅读(938) 评论(0) 推荐(0)

ext2文件系统

摘要: 2.1. 总体存储布局 我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局。 图 29.2. ext2文件系统的总 阅读全文

posted @ 2018-02-22 16:25 AlanTu 阅读(418) 评论(0) 推荐(0)

从ext2文件系统上读出超级块

摘要: 概述 本篇博客中,我们将仔细分析如何从格式化为ext2文件系统的磁盘中读取超级块并填充内存超级块结构,每次将一个格式化了ext2文件系统的磁盘(分区)挂载到挂载点的时候会调用该方法,该方法在操作系统中的实现主要是函数ext2_fill_super。 实现 在ext2系列之前的博客中我们描述了ext2 阅读全文

posted @ 2018-02-22 16:25 AlanTu 阅读(1043) 评论(0) 推荐(0)

ext2磁盘布局

摘要: 概述 本篇博客主要关注ext2文件系统的磁盘布局,即ext2会在格式化时将磁盘划分成什么样子。 ext2磁盘布局 任何Ext2分区中的第一个块从不受Ext2文件系统的管理,因为这一块是为分区的引导扇区所保留的。Ext2分区的其余部分被分割成块组(block group),每个块组的分布图如下图1所示 阅读全文

posted @ 2018-02-22 16:24 AlanTu 阅读(1482) 评论(0) 推荐(0)

c++拷贝构造函数详解

摘要: 一、什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简单例子。 #include<iostream> using namespace 阅读全文

posted @ 2018-02-22 16:14 AlanTu 阅读(169306) 评论(10) 推荐(25)

C++构造函数

摘要: 构造函数 每个类分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。 构造函数的名字和类名相同。和其他函数不一样的是,构造函数没有返回类型;除此之外类似于 阅读全文

posted @ 2018-02-22 15:59 AlanTu 阅读(647) 评论(0) 推荐(0)

复制构造函数与赋值函数

摘要: 构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即: A(void) //默认无参数构造函数 A(const A &a 阅读全文

posted @ 2018-02-22 15:55 AlanTu 阅读(2208) 评论(0) 推荐(0)

导航