2023年10月

计算机组成原理2

更好的浏览:https://type.dayiyi.top/index.php/archives/219/

1.利用Logisim软件设计一个1位加法器

加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可由加法器来构成。

全加器,全加器是实现两个一位二进制数及低位来的进位数相加(即将三个二进制数相加),求得和数及向高位进位的逻辑电路。所以全加器有三个输入端(A,B,C)和两个输出端S,Cout)。

设计思路:一个全加器可以用两个1位半加器和或门组成。

1.1半加器:

真值表

ABSum (S)Carry (Cout)
0000
0110
1010
1101
  1. 和(Sum,): S=AB
  2. 进位(Carry, Cout): C = AB

image-20231019200842433

也可以直接生成

image-20231019201020494

全加器:

输入:A、B、C

输出:S、Cout

同样的,还是先写真值表

ABCSum (S)Carry (Cout)
00000
00110
01010
01101
10010
10101
11001
11111

然后直接生成就可以啦

image-20231019201712436

image-20231019201812901

逻辑关系式:

和(Sum, S):S=ABC

进位(Carry, Cout): Cout=AB+BC+AC

结果与加法器一样(这个加法器可以调位宽):

image-20231019203740394

2、利用1位全加器设计4位加法器

改下标签:cincout

image-20231019202020321

魔改电路位置,直接画就行:

image-20231019204356330

image-20231019202038523

image-20231019203417451

image-20231019204704074

image-20231019204824841

要命:

image-20231019205256455

正常工作了

image-20231019205413466

3、可控加减电路的设计(利用上节课数据选择器电路)

3.1 生成一个数字选择器

真值表:

SD0D1Y
0000
0010
0101
0111
1000
1011
1100
1111

逻辑表达式:$Y=S⋅D_1+S⋅D_0$

image-20231019205804368

image-20231019205815724

image-20231019205912487

image-20231019205943573

3.2 画一下

image-20231019210122918

3.3 4位全加器

image-20231019211011296

3.4 画

不兼容的位宽诶

image-20231019211229304

3.5 生成一个4位2路选择器

  • $( Y1 = SEL \cdot D21 + \overline{SEL} \cdot D11 )$
  • $( Y2 = SEL \cdot D22 + \overline{SEL} \cdot D12 )$
  • $( Y3 = SEL \cdot D23 + \overline{SEL} \cdot D13 )$
  • $( Y4 = SEL \cdot D24 + \overline{SEL} \cdot D14 )$

输入:

  • $D_{11}$
  • $D_{12}$
  • $D_{13}$
  • $D_{14}$
  • $D_{22}$
  • $D_{23}$
  • $D_{24}$
  • $D_{25}$
  • $S_{el}$

输出:

  • $Y_{1}$
  • $Y_{2}$
  • $Y_{3}$
  • $Y_{4}$

真值表:

要命

对一下:

然后把这里删掉:中间多的那几个引脚删掉

这个样子:

出来啦

4、在Logisim中应用运算器部件设计

99+55

img

99-55

21*6

5、main电路中调用子电路实现特定四则运算

Python 3.12.0 (tags/v3.12.0:0fb18b0, Oct  2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> (100+50-15)*2
270

文件:


https://pic.icee.top/blog/dl_files/实验2_文件_49688a97-1eae-40b9-9d4a-8f5fa1762cfe.rar

云与虚拟化——实验4 构建镜像

实验4-1 利用Docker commit构建带sshd服务自定义镜像

1.1 拉取镜像,并安装ssh,生成秘钥生成镜像

# 拉取镜像
docker pull centos:7
# 启动一个容器
docker run -itd --name centos_sshd centos:7 bash
# 在容器里启动bash,并且显示出来
docker exec -it centos_sshd bash

image-20231019142535047

进入容器:

#切换镜像源到cernet
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.cernet.edu.cn/centos|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo
#安装sshd,以下在容器里进行
yum -y install openssh-server net-tools
mkdir -pv /var/run/sshd
#启动脚本
echo "/usr/sbin/sshd -D" > /auto_sshd.sh
#查看文件
cat /auto_sshd.sh
#给执行权限
chmod +x /auto_sshd.sh
#修改密码:
echo "root:123456" | chpasswd
#生成秘钥:一路回车哦
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

image-20231019142808785

image-20231019142844134

再生成俩秘钥

ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
#退出容器
exit

image-20231019143109874

构建镜像:

docker commit centos_sshd centos7_sshd:1.0
            当前的containerd  目标镜像:TAG信息
docker images

image-20231019143810378

1.2测试容器是否可用:

docker run -itd --name centos_7.0-1 centos7_sshd:1.0
docker ps

成功

image-20231019143858385

测试SSH是否可用

#               containerID  执行的软体
docker exec -it c43a bash
# 查看IP
ifconfig
# CTRL + P +Q 挂起退出或者直接ctrl+X

#上面两行也可以直接执行:
docker exec -it centos_7.0-1 ifconfig

#启动SSH服务
docker exec -itd centos_7.0-1 八省/auto_sshd.sh

image-20231019144028627

image-20231019150408738

1.3连接SSH

#这里填你的IP
ssh root@172.17.0.6
#密码:123456

image-20231019144712817

image-20231019150738368

1.4查看镜像/Container信息

docker inspect centos7_sshd:1.0

image-20231019145506707

2 帮助:

# 删除全部容器
docker rm -f $(docker ps -aq)
#         force  -a全部 -q只显示id

# SSH无法连接删除这个文件:
rm -rf ./.ssh/known_hosts

实验4-2 利用Dockerfile构建带sshd服务的自定义镜像

3.1Dockerfile 构建centos7_sshd:1.0

新建个目录:

mkdir -pv /opt/centos_sshd
cd /opt/centos_sshd
vi Dockerfile

把这个文件塞进去

# 使用CERNET镜像源的CentOS 7作为基础镜像
FROM centos:7
MAINTAINER dayi 
# 切换镜像源到CERNET
RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \
        -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.cernet.edu.cn/centos|g' \
        -i.bak \
        /etc/yum.repos.d/CentOS-*.repo
# 安装必要的软件包
RUN yum -y install openssh-server net-tools && \
    mkdir -pv /var/run/sshd && \
    echo "/usr/sbin/sshd -D && nohup" > /auto_sshd.sh && \
    chmod +x /auto_sshd.sh && \
    echo "root:123456" | chpasswd && \
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
    ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
    ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
# 暴露SSH端口
EXPOSE 22
# 启动SSH服务
CMD ["bash","/auto_sshd.sh"]

image-20231019151206964

3.2构建镜像

构建!

cd /opt/centos_sshd
#构建
docker build -t centos7_sshd:2.0 .
#查看镜像
docker images

image-20231019151719703

3.3 启动!

docker run -itd --name centos7_ssh_2 centos7_sshd:2.0
docker exec -it centos7_ssh_2 ifconfig

image-20231019153533889

连接试试:

ssh root@172.17.0.2
123456

image-20231019153635632

3.4 启动失败

# 删除全部容器
docker rm -f $(docker ps -aq)
#         force  -a全部 -q只显示id

# SSH无法连接删除这个文件:
rm -rf ./.ssh/known_hosts

协议分析——实验七 利用Wireshark分析ICMP

地址:

软件准备

似乎不用准备什么东东,可以开机的电脑和系统就可以啦

先看看实验报告:

在实验报告中回答下面问题:
(1)查看ICMP echo 分组,是否这个分组和前面使用 ping命令的ICMP echo 一样?
(2)查看ICMP错误分组,它比ICMP echo 分组包括的信息多。ICMP错误分组比ICMP echo 分组多包含的信息有哪些?
(3)尝试使用ping –f命令产生icmp报文,并观察分析。

1.设计能捕获多种ICMP报文的实验步骤。
2.记录并分析截获的数据包。

这样的话就可以啦

照着实验步骤来就好。

推荐一个小软件:Best Trace 下载地址:https://www.ipip.net/product/client.html#besttrace

image-20231014214219998

1、ping 和 ICMP

利用Ping程序产生ICMP分组。Ping向因特网中的某个特定主机发送特殊的探测报文并等待表明主机在线的回复。具体做法:

(1)打开Windows命令提示符窗口(Windows Command Prompt)。
(2)启动Wireshark 分组嗅探器,在过滤显示窗口(filter display window)中输入icmp,开始Wireshark 分组俘获。
(3)输入“ping –n 10 hostname” 。其中“-n 10”指明应返回10条ping信息。
(4)当ping程序终止时,停止Wireshark分组俘获。

这个感觉照做就好

image-20231014214525371

打开软体哦,然后双击捕获的适配器。

输入ICMP

image-20231014214553088

然后在cmd里面ping就好

ping -n 10 a.dayiyi.top

image-20231014214649938

image-20231014214640437

大概也就这个样子
image-20231014215127976

咱集群内网包太多就不放文件了(几秒14M的流量),有用的不到20K。、

TYPE 0 CODE8

echo req 分组

image-20231014221830120

TYPE0 CODE 0

echo reply分组

image-20231014221849571

image-20231014221043250

2、ICMP和Traceroute

(1) 启动Window 命令提示符窗口

(2) 启动Wireshark分组嗅探器,开始分组俘获。

(3) Tracert命令在c:\windows\system32下,所以在MS-DOS 命令提示行或者输入“tracert hostname” or “c:\windows\system32\tracert hostname” (注意在Windows 下, 命令是 “tracert” 而不是“traceroute”。)如图4所示:

(4)当Traceroute 程序终止时,停止分组俘获。

推荐使用联通的流量或者宽带,其他的网络结果不明显

准备命令:

tracert a.dayiyi.top

开始捕获

这个过程比较慢

image-20231014221230953

你会发现TTL会越来越长

image-20231014221300067

image-20231014221521619

BEST TRACE

也可以试试BEST trace

image-20231014221546607

同样的,直接追踪就好

image-20231014222255341

回答问题

(1) 查看ICMP echo 分组,是否这个分组和前面使用 ping命令的ICMP echo 一样?

可以看到这里的分组跟之前有点区别了。

image-20231014225538616

REQ会出现无回应的情况,也就是wireshark没有找到相应的回应。

image-20231014230433677

同时也会出现TTL exceeded的情况

(2) 查看ICMP错误分组,它比ICMP echo 分组包括的信息多。ICMP错误分组比ICMP echo 分组多包含的信息有哪些?

包含了当前节点的IP信息,也就是当前路由的IP信息,通过一定的计算可以计算出相应的访问时间。

(3)尝试使用ping –f命令产生icmp报文,并观察分析。

-f 在数据包中设置“不分段”标记(仅适用于 IPv4)。

image-20231014231953064

如果拉大:

image-20231014232035182

3、实验报告

1.设计能捕获多种ICMP报文的实验步骤。

除了wireshark,还可以直接在网关上干

Linux下:

tcpdump host 39.105.181.66 -w cap.cap

image-20231014233925377

image-20231014234431375

image-20231014234447585

2.记录并分析截获的数据包。

image-20231014234504982

正常的ICMP啦

image-20231014234552944

回应

image-20231014234706415

文件下载

https://pic.icee.top/blog/dl_files/traceroute_sdust_filter_75e13846-16df-4061-9147-c281f920065d.pcapng

image-20231014235241923

计算机组成原理1——认识logisim软件、门电路逻辑功能测试

实验名称

认识logisim软件、门电路逻辑功能测试

实验目的

熟悉Logisim仿真软件的使用环境。

了解基本逻辑门的使用:与、或、非和Logisim的基本操作。

实验原理

Logisim是一种用于设计和模拟数字逻辑电路的教育工具。凭借其简单的工具栏界面和构建它们时的电路仿真,它非常简单,有助于学习与逻辑电路相关的最基本概念。由于能够从较小的子电路构建更大的电路,并通过鼠标拖动来绘制电线束,因此可以使用Logisim来设计和仿真用于相关课程的教学目的。

实验材料

Logisim软件

实验过程

打开附logisim使用手册,了解软件界面和功能。

实验1 门电路绘制

打开附logisim使用手册,了解软件界面和功能。

任务1:依照使用手册手工绘制电路图如下:(改变输入查看输出结果,查看真值表)

画一下:

image-20231009191814227

查看真值表:

查看表达式:

image-20231014192944222

电路为异或电路

增加电路:

image-20231009193348901

表达式:

image-20231014193052757

真值表:

image-20231014193111497

任务2——在logisim的管理窗口完成2-4译码器电路图的绘制,并分别用自动仿真、和单步仿真验证其逻辑功能

画一个:

image-20231009194406425

查看真值表:

image-20231009194832657

查看表达式:

image-20231014193323525

逻辑功能(点点,也正常)

image-20231014193347854

3-8译码器:

image-20231009200347911

任务3.新建电路,修改其真值表,与2-4为译码器一样,然后建立电路,生成逻辑门电路

生成一个2-4译码器:

image-20231014193736281

image-20231014193744345

输出:

image-20231014193819760

真值表改成这个:

image-20231014193847658

查看表达式:

image-20231014193859005

image-20231014193923961

可以看到已经正常建立:

2-4译码器

image-20231014194246038

2-4 译码器2输入

image-20231014194141807

2-4译码器与非:

image-20231014194117916

3-8 译码器

一样的

image-20231014194313882

image-20231014194355056

改下真值表:

image-20231014194537522

生成1:

image-20231014194626517

生成2(2逻辑门):

image-20231014194649123

生成3(与非门):

image-20231014194740755

生成4:(与非二逻辑门)

image-20231014194807163

逻辑正常:

image-20231014195236814

半加器:

image-20231009204557688

全加器:

image-20231014195059055

image-20231014195153837

image-20231014195202417

任务4:二路选择器(1位)

输入端:X0, X1, Sel

输出端:Out

功能描述:当Sel端为0时,输出X0,当Sel端为1时,输出X1

建立电路并分析逻辑

image-20231014200808291

表达式:

image-20231014200914485

真值表:

image-20231014200920135

逻辑1:

image-20231014200932551

逻辑2:

image-20231014200942588

OUT = x0 ~SEL + X1 X1 SEL

OUT = x0 ~SEL + X1 SEL

任务5:生成电路

给定逻辑表达式:Out1=A xor B+B xor C+ A xor C

Out2=A&B+B&C+C&A

直接生成就好:

image-20231014201151675

image-20231014201147614

输入:A xor B+B xor C + A xor C

image-20231014201221402

输入:A B + A C + B C

image-20231014201558766

image-20231014201405203

文件下载

image-20231014201902182

https://p.dabbit.net/blog/dl_files/实验1-文件_6ec3be49-9f94-4c3f-8efb-a6f5fe3f55ba.rar