Brains


Algorithm、Machine Learning、Search、cloud computing
on Linux, Namespace, Kernel

Linux Namespace简介

Linux Namespace简介 Linux Namespace提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,可以享有一份独立的系统资源。目前Linux中提供了六类系统资源的隔离机制,分别是: Mount: 隔离文件系统挂载点 UTS: 隔离主机名和域名信息 IPC: 隔离进程间通信 PID: 隔离进程的ID Network: 隔离网络资源 User: 隔离用户和用户组的ID 下面简单的介绍一下这些Namespace的使用和功能。 Namespace的使用 涉及到Namespace的操作接口包括clone()、setns()、unshare()以及还有/proc下的部分文件。为了使用特定的Namespace,在使用这些接口的时候需要指定以下一个或多个参数: CLONE_NEWNS: 用于指定Mount Namespace CLONE_NEWUTS: 用于指定UTS Namespace CLONE_NEWIPC: 用于指定IPC Namespace CLONE_NEWPID: 用于指定PID Namespace CLONE_NEWNET: 用于指定Network
Read More
on Linux, Memory, Study

内存寻址之段页存储机制分析

背景 学习操作系统这门课的时候,曾不止一次的接触到操作系统的段页式管理机制,但当是都是浅尝辄止,不知道操作系统为啥要有这个机制。如今时间过去很久,关于这个机制的背后的原理和实现机制,早已忘记很久了。。最近在看操作系统方面的知识,借此把自己的理解记录一下。 要理解段页式管理机制的发展历程,还得从早期的处理器的寻址方式说起。 内存寻址方式的发展历程 首先简单的介绍下内存寻址的概念,现代计算机是基于冯.诺依曼的体系结构,这个体系结构是以存储为中心的,也就是说所有的运算的前提都是先从内存中取得数据,所以内存寻址技术从某种程度上代表了计算机技术。 直接寻址 在处理器发展的早期阶段,Intel 公司推出了第一款8位的处理器--8080,它的内存寻址的方式简单粗暴,程序都是通过硬编码的形式绝对定位到内存地址。这种情况下的程序都有明显的缺点:可控性弱、难以重定位、难以维护等。 分段 很快在 Intel 推出的另一款处理器 8086 中,它可以寻址空间达到 1M,即地址线扩展到了 20 位,由于当时制造20位的寄存器比较困难,为了能在 16 位的寄存器的基础上寻址 20 位的地址空间,引入了一个重要的概念——段,段的地址存放在寄存器中,换句话说把
Read More
on Posix锁的认识, Linux

同步互斥 - 锁

这一篇文章主要讲述UNIX里面的锁机制,分为2类:一种主要用于多线程Thread之间的共享资源访问,另一种主要用于多进程Process之间的访问。参考资料《UNIX环境高级编程》,这是我自己的一些理解,以后还要继续补充。 线程Thread之间的锁 在多线程的环境中,涉及到共享变量的存取,就需要一定程度的同步,否则可能出现意想不到的情况。在UNIX中,用于多线程之间同步的锁分为以下几种: 互斥量(mutex) 读写锁(reader-writer lock) 条件变量 自旋锁 屏障(barrier) 最基本的就是互斥量与自旋锁,其他种类的锁都是对它们的一种封装。下面我依次描述这些类型的锁。 互斥量 互斥量应该很好理解,在访问共享资源前,对互斥量进行加锁,访问完之后进行解锁。对互斥量加锁之后,其他试图再次对该互斥量加锁的线程都会进行阻塞。注意:如果加锁的线程释放了此互斥量,那么所有等待该锁的线程都会被唤醒。 在POSIX中对互斥量进行了如下描述: #include <pthread.h> /* * 互斥量使用pthread_mutex_t数据类型表示的, * 在使用它之前,需要对其初始化。 */ int pthread_
Read More