[后台开发工程师总结系列] 2.操作系统之进程

进程进程的概念和特征进程结构一般由三部分组成:代码段、数据段和堆栈段。代码段用于存放程序代码数据,数个进程可以共享一个代码段。而数据段存放程序的全局变量、常量和静态变量。堆栈段中栈用于函数调用,它存放着函数参数、函数内部定义的局部变量。对斩断还包含了进程控制块(PCB)。PCB处于进程核心堆栈底部,不需要额外分配空间。PCB是进程存在的唯一标识。系统通过PCB的存在而感知进程的存在。 进程是程序的一次执行 进程是一个程序及数据在处理机上执行时所发生的活动 进程是系统进行资源分配和调度的独立单位。进程的独立运行由进程控制块PCB控制和管理。程序段、相关数据、PCB三部分构成了进程映像。进程映像是静态的进程。 进程具有动态性(创建、活动、暂停、终止过程、生命周期),并发性(多个进程在一段时间同时运行),独立性(进程是一个独立运行获得和调度资源的独立单位)、异步性(进程按照独自不可预知的速度前进)、结构性(每个进程都有一个PCB描述) linux 系统的进程启动过程 整个linux是一个树形结构。树是系统自动构造的,即内核下的0号进程,它是所有进程的祖先。由0号进程创建1号进程(内核态),1 号进程负责执行内核的部分初始化工作及系统配置,并创建若干个用于高数储存和虚拟管理的内核线程。 随后1号进程调用execve()运行可执行程序init , 并演变成用户态1号进程,它按照系统配置文件/etc/initab 的要求,完成系统的启动工作。并创建编号 1、2 和若干终端注册进程 getty。 当getty检测到来自终端的信号时, getty将通过 execve执行注册程序 login, 此时就可以通过用户名、密码登录。如果登录成功,login() 程序执行shell, shell进程接替 getty 进程的pid 取代getty进程。后续进程再通过shell产生 0号进程–》1号内核进程–》1号内核线程–》1号用户进程–》getty进程–》shell进程

Continue Reading →

[后台开发工程师总结系列] 1.C++

数组1. 一维数组的声明一维数组的声明应指出以下几点 储存在元素中的值类型 2. 数组名 3. 数组中的元素数 数组中定义的类型可以使内置类型或类类型,除引用外,数组元素还可以是符合类型,但是不能定义引用。 虽然没有引用数组,但是可以有数组引用 12int a[6] = {0,2,4,6,8};int (&p)[6] = a;

Continue Reading →

HTTP复习

HTTP 复习协议是计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。HTTP协议是一种详细规定了浏览器和万维网服务器之间相互通信的规则,通过因特网传送万维网文档和数据的协议。HTTP协议可以使浏览器更加高效的运行,使网络的传输效率更高。它不仅保证计算机快速正确的传输超文本文档,还确定哪一部分先显示。 HTTP由于其灵活简单快速的特点,应用非常广泛。浏览器网页是HTTP主要的应用,但其不只是用于网页浏览。只要通信的双方都使用他就可以通信。比如QQ软件就用到了HTTP协议。

Continue Reading →

进程

进程程序与进程进程结构一般由三部分组成:代码段、数据段和堆栈段。代码段用于存放程序代码数据,数个进程可以共享一个代码段。而数据段存放程序的全局变量、常量和静态变量。堆栈段中栈用于函数调用,它存放着函数参数、函数内部定义的局部变量。对斩断还包含了进程控制块(PCB)。PCB处于进程核心堆栈底部,不需要额外分配空间。PCB是进程存在的唯一标识。系统通过PCB的存在而感知进程的存在。 程序如何转换为进程? 一般情况下linux下C++的生成分为四个阶段:预编译、编译、汇编、连接。编译器g++经过预编译、编译、汇编3个步骤将源程序将文件转换为目标文件。最后形成可执行程序。当程序执行时,操作系统将可执行程序复制到内存中 1 内核将程序将程序读入内存、为程序分配内存空间 2 内核为进程分配进程标识符(PID)及其他资源 3 内很为进程保存 PID 及其他信息,把进程放入运行队列中等待执行,程序转化为进城后就可以被调度执行。

Continue Reading →

多线程编程(C++)

多线程早期计算机只允许一个程序独占资源,一次只能执行一个程序。计算力是一种宝贵的资源。 这种背景下,多程序并发执行的需求十分迫切,由此产生了进程的概念。进程在多数早期操作系统中是执行工作的基本单元。进程是包含程序和资源的集合,每个程序与其他程序一起参与调度,竞争CPU、内存等系统资源。每次进程切换都存在资源的保存和恢复,这被称为上下文切换。进程的引入解决了多用户支持的问题,但是产生了新的问题:进程频繁切换引起的额外开销严重影响系统性能。进程通信要求复杂的系统级实现。 例如一个简单的GUI任务,通常一个任务支持界面交互、一个任务支持后台运算。如果每个任务都由一个进程来实现会相当的低效。对每一个进程来说,系统资源看上去都是独占的,比如内存空间。这样演化利用分配给统一个进程实现多个任务的方法。同一个进程内部的线程共享进程的所有资源。共享这些内存空间,比如定义个全局变量,A将其赋值为1,B看到这个变量也是1。线程很方便的支持了进程内部的并发,避免了频繁切换的开销。

Continue Reading →

网络IO模型

网络IO模型IO是计算机体系中重要的一部分。IO有两种操作,同步IO和异步IO。同步IO是指必须等待IO操作完成后控制权才能返回给用户进程。异步IO指的是,无需等待IO操作完成,就将控制权返回给用户进程。 网络中的IO常见如下情况: 输入操作:等待数据到达套接字接受缓冲区 输出操作:等待套接字发送缓存区有足够的空间容纳将要发送的数据 服务器接受连接请求:等待新的用户请求到来 客户端发送连接请求:等待服务器送回客户SYN对应的ACK

Continue Reading →

TCP API

TCP 网络编程API网络通信概要网络进程如何通信?首要解决如何标识一个进程,本地可以用PID来解决,而网络中用IP+端口号来唯一标识一个进程。这样利用(IP、端口号、PID)可以唯一标识一个网络中的进程。 socket起源于UNINX,UNINX哲学之一就是一切皆文件,有一个打开、读写、关闭的模式来操作。socket就是该模式的一个实现,socket就是一种特殊的文件。 使用TCP/IP的协议应用程序采用应用编程接口 UNINX BSD关键字来实现网络进程通信,目前几乎所有的应用程序都是使用socket,网络通信无处不在。其基本模式包括:

Continue Reading →

编译与调试(C++)

[TOC] 编译g++ helloworld.cpp 命令被分为四个步骤,预处理、编译、汇编、链接 编译与链接 预处理首先是源码相关和头文件,如iostream被预处理其处理成一个.i 文件,第一步相当于该命令 1g++ -E helloworld.cpp -o hellword.i 其中-E表示只进行预编译,直接输出预编译结果 预处理命令主要处理以#开头的预编译命令,如#include #define 将所有的#define删除, 展开所有的宏定义 处理所有的条件编译指令 #if、#elif、#else、endif 处理#include预编译指令,将文件插入指定位置 过滤注释内容 添加行号标识,一遍编译器调试时产生行号信息 保留所有的#progama指令

Continue Reading →

TCP(二轮复习)

网络模型1 七层网络模型国际标注化组织ISO于1981年 正式推荐了一个网络体系结构–七层参考模型,也被叫做开放系统互连模型 这七层网络模型在传输过程中还会对数据进行封装,过程如图所示 在ISO七层网络模型中,当一台主机需要传送用户数据时,数据先进入应用层。在应用层中,数据被加上应用层报头(AH),形成应用层协议数据单元(PDU),然后被递交到表示层。表示层不关心上层应用数据格式而是把整个数据包看成一个整体(应用层数据)进行封装,及加上表示层报头(PH)。下层分别加上自己的报头,其中数据链路层还会封装一个链尾,形成一帧数据。 当一帧数据通过物理层传输到目标主机物理层时,主机递交到数据链路层,同样经历上述相反的过程一层一层解包拿到数据。

Continue Reading →

STL剖析(vector,string)

STL概论 长久以来软件届一直希望建立一种可复用的东西,以及一种得以造出“可重复运用东西”的方法。 子程序、程序、函数、类别、函数库、类别库、组件、结构模块化设计、模式、面向对象 … 都是为了 复用性的提升 复用性必须建立在某种标准之上,但是在许多环境下开发最基本的算法和数据结构还迟迟不能有标准。大量程序员从事重复劳动,完成前人完成而自己不拥有的代码。 为了建立数据结构算法的标准,降低耦关系,提升独立性、弹性,交互操作性,诞生了STL

Continue Reading →