• 进程


    内核的功用:

    	进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
    

    进程的概念:

    	Process: 
    		运行中的程序的一个副本,是被载入内存的一个指令集合
    		进程ID(Process ID ,PID )号码被用来标记各个进程
    		UID 、GID 、和SELinux 语境决定对文件系统的存取和访问权限
    		通常从执行进程的用户来继承
    		存在生命周期
    		进程中可以包括一个或多个线程(thread),内存空间共享
    	task struct(结构):
    		Linux内核存储进程信息的数据结构格式
    	task list:
    		多个任务的task struct 组成的链表
    

    进程创建:

    		init :第一个进程
    			父子关系
    		进程:都由其父进程创建,CoW(写时复制),fork(), clone()
    

    进程优先级:

    	系统优先级:
    		数字越小,优先级越高
    		0-139(CentOS4,5)
    			各有140个运行队列和过期队列
    		0-98 ,99(CentOS6)
    	实时优先级: 99-0
    		值越大优先级越高
    	静态优先级:100-139
    	
    	进程默认启动时的nice 值为0 ,优先级为120
    	
    	只有根用户才能降低nice 值(提高优先性)
    	
    	nice 值(动态优先级):
    		-20到19,对应系统优先级100-139 或99
    	BigO:
    		时间复杂度,用时和规模的关系
    		O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)
    	时间片:
    		0-99的时间片到了,还继续运行,而99以后,时间片到后,就开始等待
    		
    	进程优先级调整:
    		进程优先级通过nice值进行调整,进程优先级=老的进程的优先级+nice值。
    		nice值是有正负的,当给定的nice 值为负数时,那么新的进程优先级值就越小,进程就被优先处理。
    		nice值在-20~19,root用户可以随意调整自己和其他用户进程的nice值,且范围为-20到19。
    		普通用户只能调整自己进程的nice值,且范围为0-19,也就是说普通用户只能减少自身进程的优先级,而不能增大优先级,这主要是为了避免用户抢占资源。
    		需注意的是,对于普通用户来说,你当前进程的nice值为5,那么他所能调整的nice值范围只能是5到19,而且不能小于5的值。
    		调整进程的nice值的方法:
    			1、对于尚未启动的进程
    				nice -n N command  ##N表示nice值,范围-20~19
    			2、对于已经启动并处于运行中的进程
    				renice -n N PID
    			3、如果修改一个进程的nice值,那么它的子进程的nice值也会继承其新的nice值,也就是说nice值可以在父进程向子进程传递。
    

    进程内存:

    	Page Frame:
    		页框,用存储页面数据,存储Page 4k
    	LRU :
    		Least Recently Used ,近期最少使用算法, 释放内存物理地址空间和线性地址空间
    	MMU:
    		Memory Management Unit,负责转换线性和物理地址
    	TLB:
    		Translation Lookaside Buffer,翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
    

    IPC:

    	Inter Process Communication(进程间的通信)
    	同一主机: 
    		使用signal(信号)
    		shm:shared memory(共享内存空间)
    		semaphore(旗语):信号量,一种计数器
    	不同主机:
    		使用rpc(remote procedure call(远程过程调用))
    		socket(套接字):IP 和端口号
    

    LRU 算法

    	假设序列为 4 3 4 2 3 1 4 2
    		物理块有3个,则
    	第1轮 4调入内存 4
    	第2轮 3调入内存 3 4
    	第3轮 4调入内存 4 3
    	第4轮 2调入内存 2 4 3
    	第5轮 3调入内存 3 2 4
    	第6轮 1调入内存 1 3 2
    	第7轮 4调入内存 4 1 3
    

    进程类型:

    	根据进程与系统终端的关系:
    		守护进程:
    			 daemon,在系统引导过程中启动的进程,和终端无关进程,(window中叫作服务)
    		前台进程:
    			跟终端相关,通过终端启动的进程
    		注意:两者可相互转化
    	根据进程占用资源的多少:
    		cpu密集型,是对cpu 占用率高的进程, CPU-Bound :CPU 密集型,非交互
    		IO密集型,是等待i/o时间长的进程,IO-Bound :IO 密集型,交互
    

    进程状态:

    	Linux内核进行的是抢占式多任务
    	运行态:running
    	就绪态:ready
    	睡眠态:
    		可中断:interruptable
    		不可中断:uninterruptable
    	停止态:stopped,暂停于内存,但不会被调度,除非手动启动
    	僵死态:zombie,结束进程,父进程结束前,子进程不关闭
    

    作业管理

    	登录系统后的每个工作进程都是当前bash的子进程,每个子进程也能同时运行。
    	Linux 的作业控制
    		前台作业:通过终端启动,且启动后,在停止之前一直占据终端;
    		后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
    		注意:
    			此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导致与此终端相关的所有作业被终止。
    			后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。
    	让作业运行于后台
    		运行中的作业: Ctrl+z --->后台休眠
    			后台休眠变成后台执行
    				jobs
    				bg jobid
    			后台执行变位前台执行
    				jobs
    				fg jobid
    		尚未启动的作业: COMMAND &
    			在6上,终端断开后,仍然执行;
    			而在7上,终端断开后,就不再执行了。
    		作业控制:
    			# fg [JOB_NUM]:把指定的后台作业调回前台
    			# bg [JOB_NUM]:让送往后台的作业在后台继续运行
    			# kill [JOB_NUM]:终止指定的作业
    			
    		
    	如果希望送往后后,剥离与终端的关系
    		#nohup COMMAND & 
    			nohup会stdout到nohup.out文件中,但可以重定向到/dev/null:nohup COMMAND &  >/dev/null  &
    		#screen;COMMAND(这是切换了个终端,然后执行命令)
    			创建新screen 会话
    				screen –S [SESSION]
    			加入screen 会话
    				screen –x [SESSION]
    			退出并关闭screen 会话
    				exit
    			剥离当前screen 会话
    				Ctrl+a,d
    			显示所有已经打开的screen 会话
    				screen -ls
    			恢复某screen 会话
    				screen -r [SESSION]
    

    程序的并行运行

    	方法1
    		vi all.sh
    		f1.sh&
    		f2.sh&
    		f3.sh&
    	方法2
    		(f1.sh&);(f2.sh&);(f3.sh&)
    	方法3
    		{ f1.sh&   f2.sh&   f3.sh& }
    

    管理临时文件

    	CentOS6 使用/etc/cron.daily/tmpwatch定时清除临时文件
    	CentOS7 使用systemd-tmpfiles-setup 服务实现
    	配置文件:
    		/etc/tmpfiles.d/*.conf
    		/run/tmpfiles.d/*.conf
    		/usr/lib/tmpfiles/*.conf
    		/usr/lib/tmpfiles.d/tmp.conf
    		/tmp 1777 root root 10d
    		/var/tmp 1777 root root 30d
    	命令行使用systemd-tmpfiles命令进程管理临时文件
    
  • 相关阅读:
    DEEP COMPRESSION小记
    python中join的用法
    Ubuntu下pycharm安装
    java.lang.ClassNotFoundException
    12种排序算法(转载)
    会场安排问题
    在GitHub上上传项目(转载)
    实现prim算法
    经典进程同步与互斥习题总结
    实现迪杰斯特拉算法
  • 原文地址:https://www.cnblogs.com/shenxm/p/8447761.html
Copyright © 2020-2023  润新知