当前位置: 首页 > news >正文

商城网站项目工作的流程网站改版 文案

商城网站项目工作的流程,网站改版 文案,专门发布采购信息的网站,爱奇艺会员做任务送十天网站目录 一、冯诺依曼体系结构 二、操作系统(Operator System) 1 .概念 2 .设计OS的目的 3 . 定位 4 . 系统调用和库函数概念 三、进程 1 .基本概念 2 .描述进程-PCB#xff08;process control block#xff09;进程控制块 3 . 组织进程 4 . 查看进程 5 .通过系统调用获取进程…目录 一、冯诺依曼体系结构 二、操作系统(Operator System) 1 .概念 2 .设计OS的目的 3 . 定位 4 . 系统调用和库函数概念 三、进程 1 .基本概念 2 .描述进程-PCBprocess control block进程控制块 3 . 组织进程 4 . 查看进程 5 .通过系统调用获取进程标示符 6 .通过系统调用创建进程-fork 7 . 进程运行 四、进程状态 1 .Linux内核源代码 2 .进程状态查看 3 . Z(zombie)-僵尸进程 4 . 孤儿进程 5 .进程运行态R 6 .进程阻塞SD 7 .进程挂起 8 .进程切换 五、进程优先级 1 .基本概念 2 .查看系统进程 3 . PRI and NI 4 . PRI vs NI 5 .查看进程优先级的命令 6 .其他概念 六、环境变量 命令行参数 1 .基本概念 2 .常见环境变量 3 . 查看环境变量方法 4 . 和环境变量相关的命令 内建命令 5 .环境变量的组织方式 6 .通过代码如何获取环境变量 7 .通过系统调用获取或设置环境变量 8 .环境变量通常是具有全局属性的 一、冯诺依曼体系结构 我们所认识的计算机都是有一个个的硬件组件组成 1.输入单元包括键盘 , 鼠标扫描仪 , 写板等   2.中央处理器 (CPU) 含有运算器和控制器等   3.输出单元显示器打印机等 注意 这里的存储器指的是内存 不考虑缓存情况这里的 CPU 能且只能对内存进行读写不能访问外设 ( 输入或输出设备 ) 外设 ( 输入或输出设备 ) 要输入或者输出数据也只能写入内存或者从内存中读取。 一句话所有设备都只能直接和内存打交道。 二、操作系统(Operator System) 1 .概念 任何计算机系统都包含一个基本的程序集合称为操作系统 (OS) 。笼统的理解操作系统包括 内核进程管理内存管理文件管理驱动管理   其他程序例如函数库 shell 程序等等 2 .设计OS的目的 与硬件交互管理所有的软硬件资源    为用户程序应用程序提供一个良好的执行环境 3 . 定位 在整个计算机软硬件架构中操作系统的定位是 一款纯正的 “ 搞管理 ” 的软件 总结 计算机管理硬件 1. 描述起来用 struct 结构体   2. 组织起来用链表或其他高效的数据结构 4 . 系统调用和库函数概念 在开发角度操作系统对外会表现为一个整体但是会暴露自己的部分接口供上层开发使用这部分由操作系统提供的接口叫做系统调用。 系统调用在使用上功能比较基础对用户的要求相对也比较高所以有心的开发者可以对部分系统调用进行适度封装从而形成库有了库就很有利于更上层用户或者开发者进行二次开发。 三、进程 1 .基本概念 课本概念程序的一个执行实例正在执行的程序等   内核观点担当分配系统资源 CPU 时间内存的实体。 2 .描述进程-PCBprocess control block进程控制块 操作系统中进程可以同时存在非常多 一个进程一定要有一个pcb  进程PCB自己的代码和数据~~ 进程内核task_struct结构体程序的代码和数据 进程信息被放在一个叫做进程控制块的数据结构中可以理解为进程属性的集合。   课本上称之为 PCB process control block Linux 操作系统下的 PCB 是 : task_struct task_struct-PCB 的一种 在 Linux 中描述进程的结构体叫做 task_struct 。   task_struct 是 Linux 内核的一种数据结构它会被装载到 RAM( 内存 ) 里并且包含着 进程的信息 。 task_ struct 内容分类 标示符(pid) : 描述本进程的唯一标示符用来区别其他进程。 状态 : 任务状态退出代码退出信号等。 优先级 : 相对于其他进程的优先级。 程序计数器 : 程序中即将被执行的下一条指令的地址。 内存指针 : 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针 上下文数据 : 进程执行时处理器的寄存器中的数据 [ 休学例子要加图 CPU 寄存器 ] 。 IO状态信息 : 包括显示的 I/O 请求 , 分配给进程的 I O 设备和被进程使用的文件列表。 记账信息 : 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。 其他信息 进程动态运行只要我们的进程task_struct将来在不同的队列中进程就可以访问不同的资源 进程的调度运行本质就算让进程控制块task_struct 进行排队  3 . 组织进程 可以在内核源代码里找到它。所有运行在系统里的进程都以 task_struct 链表的形式 存在内核里。 对进程的管理就变成了对链表的增删查改 4 . 查看进程 进程的信息可以通过 /proc 系统文件夹查看 如要获取 PID 为 1 的进程信息你需要查看 /proc/1 这个文件夹。   大多数进程信息同样可以使用 top 和 ps 这些用户级工具来获取 5 .通过系统调用获取进程标示符 进程 id PID   父进程 id PPID #include stdio.h #include sys/types.h #include unistd.h int main() {         printf(pid: %d\n, getpid());         printf(ppid: %d\n, getppid());         return 0; } 6 .通过系统调用创建进程-fork fork是一个函数他是操作系统提供的 运行 man fork 认识 fork   fork 有两个返回值   父子进程代码共享数据各自开辟空间私有一份采用写时拷贝 #include stdio.h #include sys/types.h #include unistd.h int main() {         int ret fork();         printf(hello proc : %d!, ret: %d\n, getpid(), ret);         sleep(1);         return 0; } fork 之后通常要用 if 进行分流 #include stdio.h #include sys/types.h #include unistd.h int main() {         int ret fork();         if(ret 0)         {                 perror(fork);                 return 1;         }         else if(ret 0)         {         //child                 printf(I am child : %d!, ret: %d\n, getpid(), ret);         }         else         {         //father                 printf(I am father : %d!, ret: %d\n, getpid(), ret);         }         sleep(1);         return 0; } 进程每次启动对应的pid都不一样是正常的每次都会由操作系统分配一个pid fork之后父子代码共享创建一个进程本质是系统中多一个进程多一个进程就是多一个 1. 内核task_struct  2. 有自己的代码和数据父进程的代码和数据从磁盘中加载而来子进程的代码和数据默认情况继承父进程的代码和数据  为什么要创建子进程  我们创建子进程目的是想让子进程执行和父进程不一样的代码 进程具有独立性父子进程也是两个不同的进程也应该具有独立性原则上数据要分开。因此子进程的数据是只读的。  fork是一个函数为什么能返回两次父子进程 当fork执行快要结束return之前创建子进程的核心代码已经完成就是子进程已经创建成功这个时候return 语句也是代码同样的也被继承父子进程各自返回自己的函数 7 . 进程运行 启动 a.  ./xxx本质就算让系统创建进程并运行——我们自己写的代码形成的可执行系统命令可执行文件。在linux中运行的大部分执行操作本质都是运行进程 b.  每一个进程都要有自己的唯一标识符叫做进程pid unsigned int c.  一个进程想知道自己的pid可以通过系统调用getpid() d.  ctrl就是在用户层面终止进程kill -9 pid  可以直接杀死进程 e.  进程每次启动的时候会记录自己当前在哪个路径下启动在运行过程中做的操作也会默认对应这个路径 四、进程状态 1 .Linux内核源代码 R运行状态running : 并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。 S睡眠状态sleeping) : 意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠 interruptible sleep 比如scanf函数。     D磁盘休眠状态Disk sleep 有时候也叫不可中断睡眠状态 uninterruptible sleep 在这个状态的进程通常会等待IO 的结束 。不可被杀深度睡眠不可中断睡眠     T停止状态stopped 可以通过发送 SIGSTOP 信号给进程来停止 T 进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。 t 停止状态 当进程遇见断点时     X死亡状态dead 这个状态只是一个返回状态你不会在任务列表里看到这个状态。 2 .进程状态查看 ps aux / ps axj 命令 3 . Z(zombie)-僵尸进程 僵死状态 Zombies 是一个比较特殊的状态。当进程退出并且父进程使用 wait() 系统调用没有读取到子进程退出的返回代码时就会产生僵死 ( 尸 ) 进程 没有读取到子进程退出的返回代码时就会产生僵死 ( 尸 ) 进程 僵死进程会以终止状态保持在进程表中并且会一直在等待父进程读取退出状态代码。   所以只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入 Z 状态 僵尸进程危害 进程的退出状态必须被维持下去因为他要告诉关心它的进程父进程你交给我的任务我办的怎么样了。可父进程如果一直不读取那子进程就 一直处于Z状态    维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在 task_struct(PCB) 中换句话说 Z状态一直不退出PCB一直都要维护  内存泄漏    那一个父进程创建了很多子进程就是不回收是不是就会造成内存资源的浪费是的因为数据结构对象本身就要占用内存想想C 中定义一个结构体变量对象是要在内存的某个位置进行开辟空间 内存泄漏  4 . 孤儿进程  父进程如果提前退出 那么子进程后退出进入 Z 之后那该如何处理呢 父进程先退出 子进程就称之为 “ 孤儿进程 ”   孤儿进程被 1号init进程领养bash 为保证子进程正常被回收避免内存泄漏所以要有 init 进程回收。  5 .进程运行态R 如图每一个进程都有自己task_struct ,里面储存这进程对应的信息另外他还可能存储着下一个pcb的地址方便作为链表样式来管理 我们在运行进程的时候每一个PCB会被放在一个运行队列当中在队列当中的状态就算是R状态。 当然一个进程时间太长的话也不会一直占用cpu他们可能会按照时间片的方式进行切换这样在一个时间段内同时得以推进的代码就叫做并发 在任何时刻都同时有多个进程在真的运行我们叫做并行 6 .进程阻塞SD 当我们在使用scanf之类的函数的时候他运行的时候会等待键盘资源是否就绪键盘上面有没有被用户按下的按键若有按键数据交给进程。 阻塞和运行的状态变化往往伴随着pcb被连入不同的队列中。入队列的不是进程的什么代码而是进程的pcb 这里我们要知道不是只有cpu才有运行队列各种设备也有自己的wait_queue .当pcb需要各种设备的数据的时候他会被排进该设备的等待队列等待拿到数据拿到之后pcb重新排入运行队列这里就会有S~RS~D相关的状态切换。 7 .进程挂起 进程挂起是用时间效率换空间的做法 当我们内存不够用的时候os会将一部分数据存储在磁盘上面唤出以便有更多可用的内存空间当需要使用该数据的时候再将该数据加载回内存中唤入。这样的处理方法可能会经常使用I/O效率大大降低。 8 .进程切换 进程会根据时间片进行切换在切换的过程中最重要的一件事情是上下文数据的保护和恢复 cpu内的寄存器本身是硬件具有数据存储的能力cpu的寄存器硬件只有一套很多个cpu内部的数据可以有多套有几个进程就有几套和该进程对应的上下文数据。但是寄存器 寄存器内容 进程上下文cpu内部的所有的寄存器中的临时数据。 五、进程优先级 1 .基本概念 cpu 资源分配的先后顺序就是指进程的优先权 priority 。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的 linux 很有用可以改善系统性能。 还可以把进程运行到指定的CPU 上这样一来把不重要的进程安排到某个 CPU 可以大大改善系统整体性能。 2 .查看系统进程 ps –l 命令 注意到其中的几个重要信息有下 UID : 代表执行者的身份 PID : 代表这个进程的代号 PPID 代表这个进程是由哪个进程发展衍生而来的亦即父进程的代号 PRI 代表这个进程可被执行的优先级其值越小越早被执行 NI 代表这个进程的 nice 值 3 . PRI and NI PRI 也还是比较好理解的即进程的优先级或者通俗点说就是程序被 CPU 执行的先后顺序此值越小进程的优先级别越高     那 NI 就是我们所要说的 nice 值了其表示进程可被执行的优先级的修正数值 PRI 值越小越快被执行那么加入 nice 值后将会使得 PRI 变为 PRI(new)PRI(old)nice 这样当 nice 值为负值的时候那么该程序将会优先级值将变小即其优先级会变高则其越快被执行    所以调整进程优先级在 Linux 下就是调整进程 nice 值    nice 其取值范围是 -20至19 一共 40 个级别。 4 . PRI vs NI 需要强调一点的是进程的 nice 值不是进程的优先级他们不是一个概念但是进程 nice 值会影响到进程的优先级变化。   可以理解 nice 值是进程优先级的修正数据 5 .查看进程优先级的命令 用 top 命令更改已存在进程的 nice top   进入 top 后按 “r”– 输入进程 PID– 输入 nice 值 6 .其他概念 竞争性 : 系统进程数目众多而 CPU 资源只有少量甚至 1 个所以进程之间是具有竞争属性的。为了高效完成任务更合理竞争相关资源便具有了优先级   独立性 : 多进程运行需要独享各种资源多进程运行期间互不干扰    并行 : 多个进程在 多个CPU 下分别同时进行运行这称之为并行   并发 : 多个进程在 一个CPU 下采用 进程切换 的方式在一段时间之内让多个进程都得以推进称之为并发 六、环境变量 命令行参数 为什么要有命令行参数 本质命令行参数本质是交给我们程序的不同的选型用来定制不同的程序功能。命令行中会携带很多的选项 例如 #includestdio.h#includestdlib.hint main(int argc,char *argv[]){int j0;for(j0;argv[j];j)printf(%s\n,argv[j]);int i0;for(i0;iargc;i){if(strcmp(argv[i],-a)0)printf(-aaaaaa\n);else if(strcmp(argv[i],-b)0) printf(-bbbbbb\n);elseprintf(-cccccccc\n);}return 0;}程序里面的参数默认是输入给父进程bash的 1 .基本概念 环境变量 (environment variables) 一般是指在操作系统中用来指定操作系统运行环境的一些参数   如我们在编写 C/C 代码的时候在链接的时候从来不知道我们的所链接的动态静态库在哪里但是照样可以链接成功生成可执行程序原因就是有相关环境变量帮助编译器进行查找。   环境变量通常具有某些特殊用途还有在系统当中通常具有全局特性 Linux中存在一些全局的设置告诉命令行解释器应该去哪些路径下去寻址可执行程序 系统中很多的配置在我们登陆Linux系统的时候已经被加载到了bash进程中内存。所以默认我们查到的环境变量是内存级的重启后会恢复到配置文件中的环境变量 我像执行我们的命令 和系统指令一样。 最开始环境变量不是在内存中而是在系统的对应的配置文件中我们可以通过以下方式去更改 vim .vash_profile vim .bashrc vim /etc/bashrc bash进程启动的时候默认会给我子进程形成两张表 argv[]命令行参数表用户输入命令行动态获取可以更新 env[]环境变量表来自于os的配置文件bash通过各种方式交给子进程  2 .常见环境变量 PATH : 指定命令的搜索路径 HOME : 指定用户的主工作目录 ( 即用户登陆到 Linux 系统中时 , 默认的目录 ) SHELL : 当前 Shell, 它的值通常是 /bin/bash 。 3 . 查看环境变量方法 echo $NAME //NAME: 你的环境变量名称 例如 4 . 和环境变量相关的命令 没有export的变量是本地变量 本地变量只在本bash内部有效无法被子进程继承下去导成环境变量此时才能被获取  内建命令 80%的命令都是由bash创建子进程执行而export和echo是内建命令不会创建子进程他们由bash亲自执行。  5 .环境变量的组织方式 每个程序 都会收到一张环境表环境表是一个 字符指针数组 每个指针指向一个 以’\0’结尾的环境字符串 6 .通过代码如何获取环境变量 方法汇总有 命令行第三个参数 #include stdio.h int main(int argc, char *argv[], char *env[]) {int i 0;for(; env[i]; i){printf(%s\n, env[i]);}return 0; } 通过第三方变量 environ 获取 #include stdio.h int main(int argc, char *argv[]) {extern char **environ;int i 0;for(; environ[i]; i){printf(%s\n, environ[i]);}return 0; } libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。 执行结果 7 .通过系统调用获取或设置环境变量 获取环境变量getenv  #include stdio.h #include stdlib.h int main() {printf(%s\n, getenv(PATH));return 0; } 执行结果 8 .环境变量通常是具有全局属性的 环境变量通常具有全局属性可以被子进程继承下去 #include stdio.h #include stdlib.h int main() {         char * env getenv(MYENV);         if(env)         {                 printf(%s\n, env);         }         return 0; } 直接查看发现没有结果说明该环境变量根本不存在 导出环境变量 export MYENVhello world 再次运行程序发现结果有了说明环境变量是可以被子进程继承下去的 父进程的数据默认能被子进程看到并访问 命令行中启动的程序都会变成进程实际上都是bash的子进程
http://www.dnsts.com.cn/news/128606.html

相关文章:

  • 用word怎么做网站网络推广公司电话
  • 手机做网站的教程无锡在线制作网站
  • 网站关健词排名台州seo网站建设费用
  • 注册公司在哪个网站wordpress软件下载站主题
  • 建设专业网站排名长沙需要做网站的企业
  • 合肥市建设工程合同备案网站深圳外贸网站建设
  • linux 做网站数据库html旅游网页设计代码
  • 商城网站建设分为几块网站建设对于企业的重要性
  • 淄博网站公司住房建设网站
  • 鲨鱼座 网站建设百度联盟做网站赚钱吗
  • 网站如何加入广告联盟关键词排名优化价格
  • 网站模板大全下载做ui设计的软件
  • 英语网站大全免费小程序制作要求
  • 翻译做网站首页html模板
  • 国际国内热点新闻事件贵阳官网seo诊断
  • 自助建站网站建设《网页设计与网站建设》
  • chinaz站长素材wordpress仿安卓主题下载
  • 做美剧网站侵权成都手机网站建设报价表
  • 网站服务器 英文有的网站显示正在建设中
  • 怎么才能申请自己的网站公司做网站一般
  • 住房和城乡建设厅网站办事大厅美食网站怎样做锅包肉
  • 北京品牌网站开发义县网站建设
  • 朝阳淘宝网站建设led外贸网站建设
  • 网站做跳转影响排名吗服务型网站建设
  • 做内容网站 用什么模版网站开发费用鉴定
  • 农村建设自己的网站首页中山网站建点
  • 佛山网站设计实力乐云seo宁波网站建设i sp.net
  • 邯郸网站建设开发公司前程无忧网广州网站建设分类岗位
  • 网站建设好专业做官网的公司
  • 做网站要实名认证吗建网站签合同