操作系统简述

网络编程

网络通信原理:

   五层协议:

     应用层: 软件做的封装

     每个软件对原数据进行封装.个性化封装.

     {'data':'今天吃了没','from':'QQ'....}

     操作系统进行的一下封装:

       socket 抽象层 接口

 1          传输层: tcp:   udp:   都会封装端口号.  3306  |   {'data':'今天吃了没','from':'QQ'....}
 2          网络层:               封装   168.172.0.12|3306|{'data':'今天吃了没','from':'QQ'....}
 3          数据链路层:           对数据进行分组,封装mac地址:  源mac地址|目标mac地址|数据类型|168.172.0.12|3306|{'data':'今天吃了没','from':'QQ'....}
 4          物理层:   网线 光纤等等物理连接介质
 5  6  tcp: 建立连接时三次握手,断开连接是四次挥手
 7  udp:pass
 8  socket : 网络套接字抽象层
 9 10  连接循环的例子:
11  server                                                     client
12  import socket                                              import socket
13  server = socket.socket()                                   client = socket.socket()
14  server.bind(('127.0.0.1',8000))
15  server.listen(6)
16  while 1:
17  conn,addr = server.accept()                                     client.connect(('127.0.0.1',8000))
18  while 1:                                                        while 1:
19          from_client_data = conn.recv(1024)                         to_server_data = client.send('发消息'.encode('utf-8'))
20          print(from_client_data.decode('utf-8'))                    from_server_data = client.recv(1024)
21          to_client_data = conn.send('回消息'.encode('utf-8'))       print(from_server_data)
22      conn.close()                                               client.close()
23  server.close()
24 25  粘包现象:
26      粘包现象: 只存在于基于tcp协议的socket
27          1,缓存区第一次没有取完,第二次会将剩下的数据recv.
28          2,连续几次发送数据,这些数据会黏在一起发送.
29 30  粘包现象的解决:
31      高大上版:封装一个报头{文件的大小,文件的路径,文件名,MD5等等}
32      strcut模块
33      4个字节| 字典的报头数据| 真实数据
34  基于udp的协议的socket了解为主
35 36  socketserver
37      基于udp的并发  基于tcp协议的并发

 

02 进程的初识  程序:应用软件,一堆代码文件.  进程:一个正在执行的程序/文件,抽象的概念.  启动一个进程具体过程:  程序存在硬盘,磁盘中,当你双击(触发了)操作系统,操作系统就会将你的程序加载到内存,然后  交于cpu进行处理.  进程的由来 :源于操作系统.

03 操作系统的发展史 一个进程: cpu 去刷碗,炒菜, 来一个任务(活) 先给操作系统,然后有操作系统给了cpu: cpu做这个任务才是一个进程.

 1  操作系统:
 2      1,定义: 操作系统就一个软件,管理,协调,控制计算机硬件与软件之间的控制软件.
 3      2,作用:
 4          如果现在没有操作系统,让你完成一个程序:
 5          写两层:
 6              1, 如何调用控制cpu,硬盘,内存.
 7              2, 具体的你的程序的代码.
 8  9          a,将一些丑陋的与硬件的接口变成了漂亮的美丽的接口.
10              f = open(三要素)
11              同一时刻多个进程共同去抢占一个cpu资源.
12          b,操作系统要合理的有序的去安排不同的进程的执行顺序问题.
13 14  操作系统与软件的区别:
15      操作系统与用户程序的差异并不在于二者所处的地位。特别地,操作系统是一个大型、复杂、长寿的软件.

 

 1  操作系统的发展史:
 2  机械类:算盘.
 3  4  电子类的计算机:
 5  第一代: 二战期间哈佛大学创建的电子计算机.
 6  工作流程:程序员拿着插件板(后期穿孔卡片),预约时间去计算机房研究.
 7  8  第一代计算机 没有操作系统概念的.
 9  优点:一个程序员可以独享一个计算机.
10  缺点:
11      1,浪费资源,一个计算机只能供一个人使用.
12      2,所有的程序都是串行的.效率很低.
13 14  第二代计算机:分为三个部分,两个机器组成.
15  工作流程: 程序猿按照顺序将字节的穿孔卡片(10个)给了1401 转化成磁带,交由7094机器运行出结果,交由1401打印出结果.
16  优点:批处理,节省了计算机的时间.
17  缺点:
18      1,中间传输还需要人员参与,效率低.
19      2, 所有程序还是串行处理.
20      3,每个人不能独享计算机了,而且你的bug不能及时修复.
21 22  第三代计算机:集成电路,多道程序技术
23  一个程序: IO(input Output) 计算.
24      计算机:既可以处理IO,又可以处理计算.
25  单个cpu:
26      多道技术:
27          炒菜,洗衣服,洗脚:
28          前提:如果这三件事情没有一点IO,全部都是计算,
29          空间上的复用:(内存可以加载很多个不同的任务)
30 31          时间上的复用:(好比cpu处理3个任务炒菜,洗衣服,洗脚)
32              1,遇到进程中的IO时,cpu就切换
33                  IO:用户输入input,f.read()
34              2,一个进程长时间被cpu处理时,操作系统就强硬的将cpu调出去处理下一个进程.
35 36      如果每个进程都有不同的IO阻塞, 遇到进程中的IO时,cpu就切换,极大提升了效率.
37 38          炒菜:   10     10    20分钟
39          洗衣服: 10     40    50分钟
40          拖地:   20     5     25分钟
41 42          串行: 95分钟.
43          并发:一个cpu在同一个时刻处理不同的进程,任务.
44                50 分钟.
45      如果每个进程都没有IO阻塞,:一个进程长时间被cpu处理时,操作系统就强硬的将cpu调出去处理下一个进程.
46      为什么这么做?
47      假如有一个任务 不着急但是非常耗时 1 + 2+几千亿.
48      另外两个任务时间短,很着急:

 

第三代计算机初期还有缺陷:

   1,内存级别各种进程间的数据物理隔离.

   2,没有达到个人独享的效果. 过了几年:

     分时系统.对内存级别的数据进行物理隔离. unix分账户概念,让人们认为自己在独享计算机.

 

04 概念:串行 并发 并行 阻塞 非阻塞

   串行:cpu将一些进程一个接一个的执行.(之前咱们写的代码都是串行.)

   并发: 一个cpu执行多个任务,看起来像是同时执行的.

   并行:真正意义的一对一服务.

     4个cpu 处理4个任务.

     4个cpu 处理五个任务.

   阻塞:IO成为阻塞.

     一个cpu串行执行10个任务,这10个任务前提如果没有IO,执行第一个任务时,下面九个都在等待,这叫阻塞吗?

   非阻塞:进程没有IO,就非阻塞.

05 进程的详解

   进程与程序的区别.

   并发并行.

   进程的创建:

   如何创建一个进程?

   双击qq开启一个进程,运行一个py文件,开启一个进程,我如何开启多个进程.

   十个任务,你如何将十个任务开启起来? 你的程序中如何开启多个进程?

     他的思路就是我要有一个主(父)进程,在这个代码里面有一个命令,通知操作系统再给我开一个进程,你把代码放进这个进程中,

     这样就相当开启了两个进程.

  两类系统开启进程的命令不同:
    linux(unix,macos):fork

     windows:CreateProcess

  两类系统开启进程内部方式稍有不同:

     linux(unix,macos): 会将主进程的所有数据复制一份,放到进程空间中.

 windows:

  进程并发的实现: 进程遇到IO阻塞或者长时间运行,操作系统会将你的进程挂起, + 保持原来的状态.

   今日总结:

   进程

   进程与程序的区别.

   操作系统发展史  

    多道技术,

     空间,时间的复用.

     串行 并发 并行 阻塞 非阻塞

   详细的进程:

     不同操作系统开不同的进程的区别.

     程序要想开启多个进程:一定是在运行一个主进程(文件)时,执行此主进程的某一行开启进程的代码(内部会通知操作系统开始进程.).

 

 

06 进程的id 父进程的id 07 开启进程的两种方式

posted @ 2019-01-30 17:52  .如影随行  阅读(188)  评论(0编辑  收藏  举报