第一二章学习笔记

第一章

第一章向我们介绍了本书的学习目标以及一些基本概念,和Linux的简单操作,但是对于基础的概念解析较少,于是我用GPT了解了一下

进程概念和进程管理

进程是计算机科学中的重要概念,它是正在运行的程序的实例。每个进程都有自己的内存空间、代码、数据和系统资源,它们在操作系统中独立运行,彼此之间通常是隔离的。以下是关于进程的一些重要概念和进程管理的要点:

  1. 进程的特征

    • 独立性:每个进程都是独立运行的,互不干扰。
    • 资源隔离:进程拥有自己的内存和资源,不共享除非明确要求。
    • 并发执行:多个进程可以同时运行,实现并发处理。
    • 程序实例:进程是程序的实例,每个进程对应一个正在运行的程序。
  2. 进程状态

    • 就绪:进程已准备好执行,等待分配CPU时间。
    • 运行:进程正在CPU上执行。
    • 阻塞:进程暂时停止执行,等待某个事件的发生(例如,等待I/O完成)。
    • 终止:进程已经执行完毕或被终止,等待被回收。
  3. 进程管理任务

    • 创建进程:操作系统可以创建新的进程,通常通过复制父进程的内容来创建子进程。
    • 调度进程:操作系统负责决定哪个进程在什么时候运行,以实现公平分配CPU时间。
    • 进程通信:进程之间可以通过进程间通信(IPC)机制来交换信息和数据。
    • 终止进程:操作系统可以终止进程,释放其资源。
    • 进程状态管理:跟踪和维护进程的状态,以确保它们能够正确运行。
  4. 进程控制块(PCB):每个进程都有一个关联的数据结构,称为进程控制块。PCB包含了关于进程的重要信息,如进程状态、寄存器值、程序计数器、内存分配信息、打开文件列表等。

  5. 进程调度:操作系统使用调度算法来决定哪个进程在什么时候获得CPU时间。这可以根据优先级、时间片轮转、先来先服务等策略来完成。

  6. 多进程与多线程:多进程和多线程是实现并发性的两种常见方式。多进程更重,因为每个进程都有自己的独立内存空间,但线程共享相同的内存空间,因此更轻量级。不同的应用场景可能更适合使用其中一种。

进程管理是操作系统的核心功能之一,它确保计算机上的多个程序能够同时运行,并在需要时有效地协同工作。进程管理有助于资源的合理利用,提高了系统的效率和可靠性。

并发编程

并发编程是一种编程方式,用于处理多个任务同时执行的情况,以提高程序的性能和效率。在并发编程中,多个任务可以同时执行,而不必等待其他任务完成。这对于需要处理大量I/O操作、多核处理器的利用、实时系统等场景非常重要。以下是并发编程的一些关键概念和技术:

  1. 线程和进程

    • 线程:线程是程序执行的最小单位,多个线程可以在同一进程内并发执行。它们共享进程的内存空间,因此可以方便地共享数据和资源。
    • 进程:进程是程序的实例,每个进程都有自己独立的内存空间和资源。多个进程可以在操作系统级别并发执行。
  2. 共享内存和消息传递

    • 共享内存:多个线程或进程可以通过共享内存来共享数据,这使它们可以直接读取和写入相同的内存位置。但需要小心处理并发访问的同步问题。
    • 消息传递:线程或进程之间可以通过消息传递机制来通信,将消息发送到接收者并等待响应。这种方式更安全,因为数据不会直接共享,但会引入一些开销。
  3. 同步和互斥

    • 同步:同步是一种控制多个线程或进程的执行顺序和协作的机制,以避免竞态条件和不确定性行为。
    • 互斥:互斥是一种同步技术,用于确保在任何给定时刻只有一个线程或进程能够访问共享资源。通常使用互斥锁、信号量等来实现。
  4. 并发模型

    • 多线程并发:使用多线程编程模型时,多个线程在同一进程内并发执行。Java、Python、C++等编程语言提供了多线程支持。
    • 多进程并发:使用多进程编程模型时,多个进程在操作系统级别并发执行。Python的multiprocessing模块可以用于多进程编程。
    • Actor模型:Actor模型是一种并发编程模型,其中的"actors"(类似于独立的并发实体)通过消息传递相互通信,而不共享状态。Erlang语言使用了这个模型。
  5. 死锁和竞态条件:并发编程中常见的问题包括死锁(多个线程或进程互相等待对方释放资源)和竞态条件(多个线程或进程同时访问和修改共享资源时可能导致不确定性行为)。必须小心设计和同步来避免这些问题。

  6. 线程池和并发工具:为了更有效地管理线程,可以使用线程池和各种并发工具,如计数器、信号量、阻塞队列等,来协调和管理并发任务的执行。

并发编程是复杂的,因为它引入了许多潜在的问题,如竞态条件和死锁。因此,在编写并发代码时,需要谨慎考虑并发问题,并使用适当的同步和控制机制来确保程序的正确性和稳定性。

TCP/IP和网络编程

TCP/IP是一种用于计算机网络通信的协议套件,它包括传输控制协议(TCP)和互联网协议(IP),用于实现数据在网络中的传输和路由。网络编程是使用这些协议来创建网络应用程序的过程,这些应用程序可以在网络上发送和接收数据。以下是关于TCP/IP网络编程的一些关键概念和步骤:

  1. Socket编程

    • 在TCP/IP网络编程中,通信的基本单位是套接字(Socket)。套接字是一种用于在网络上进行通信的编程接口,它允许应用程序创建、发送和接收数据。
  2. 客户端和服务器

    • 网络应用程序通常分为客户端和服务器两部分。
    • 客户端:客户端应用程序发送请求到服务器,并接收服务器的响应。它通常主动发起连接。
    • 服务器:服务器应用程序监听来自客户端的连接请求,并响应这些请求。它被 passively 侦听并处理连接。
  3. TCP连接

    • TCP是一种可靠的协议,它提供面向连接的通信。在网络编程中,使用TCP套接字来建立可靠的连接。
    • 客户端和服务器分别创建自己的套接字,并通过 IP 地址和端口号来识别对方。客户端发起连接请求,服务器接受连接。
    • 一旦建立连接,客户端和服务器可以通过套接字进行数据传输。
  4. IP地址和端口号

    • IP地址用于标识网络中的主机,而端口号用于标识主机上运行的不同应用程序或服务。
    • IP地址通常是IPv4或IPv6格式的,例如,IPv4地址是如 "192.168.1.1" 这样的格式。
    • 端口号是一个整数,通常在范围0到65535之间。0到1023的端口号是预留给系统和常用服务的。
  5. 编程语言和库

    • 不同的编程语言提供了用于网络编程的库和工具。例如,Python有socket库,Java有java.net包,C/C++有sockets库等。
    • 这些库允许开发人员创建套接字、建立连接、发送和接收数据,以及处理网络通信中的各种任务。
  6. 错误处理和异常处理

    • 在网络编程中,网络连接可能会发生错误,如连接超时、连接中断、数据包丢失等。
    • 开发人员需要编写适当的错误处理和异常处理代码,以确保应用程序能够在不稳定的网络环境中正确运行。
  7. 安全性和加密

    • 在网络通信中,数据的安全性是一个关键问题。敏感数据通常需要加密,以防止中间人攻击和数据泄露。
    • 使用安全套接字层(SSL)或传输层安全性协议(TLS)等协议来加密数据传输。

网络编程是一个广泛的领域,涵盖了各种应用程序类型,包括Web应用程序、游戏服务器、聊天应用程序、文件传输和远程控制等。了解TCP/IP协议和套接字编程是开发网络应用程序的关键,它们允许开发人员实现数据通信和交互。

信号、信号处理和进程间通信

信号、信号处理和进程间通信是操作系统和多进程编程中的重要概念。让我们分别介绍它们:

  1. 信号(Signal)

    • 信号是一种异步通知机制,用于在操作系统中处理各种事件和异常情况。它们是操作系统向进程发送的小型消息。
    • 信号可以由操作系统本身、其他进程或进程自身生成。例如,Ctrl+C键盘组合键会向前台进程发送中断信号(SIGINT)。
    • 常见的信号包括SIGINT(中断)、SIGTERM(终止)、SIGKILL(强制终止)等。
    • 进程可以注册信号处理函数,以便在接收到信号时采取特定的操作。默认情况下,某些信号会导致进程终止,但可以通过信号处理函数来更改其行为。
  2. 信号处理(Signal Handling)

    • 信号处理是指为进程中的特定信号定义处理程序的过程。处理程序是一段代码,用于指定在接收到信号时要采取的操作。
    • 在大多数编程语言中,可以使用信号处理函数来捕获和处理信号。例如,在C语言中,可以使用signal函数来注册信号处理函数。
    • 信号处理程序可以执行各种操作,如记录日志、清理资源、重新启动进程等,具体取决于信号的类型和应用程序的需求。
  3. 进程间通信(Inter-Process Communication, IPC)

    • 进程间通信是不同进程之间交换数据和信息的机制。在多任务操作系统中,多个进程可能需要协同工作或共享数据。
    • 常见的IPC机制包括管道、套接字、消息队列、共享内存和信号量等。
    • 信号可以用于简单的进程间通信,例如,一个进程可以向另一个进程发送信号来触发某些操作。
    • 更复杂的IPC机制允许进程直接交换数据,共享资源或通过消息传递进行通信。

总之,信号是一种用于通知进程事件和异常情况的机制,信号处理允许进程在接收到信号时采取特定的操作。而进程间通信是一种机制,允许不同进程之间交换数据和信息,以实现协同工作和共享资源的目的。这些概念对于多任务编程和操作系统编程非常重要。

文件系统

文件系统是计算机系统中用于组织和管理数据存储的关键组成部分。它提供了一种层次结构的方法来存储、检索和管理文件和目录,使用户和应用程序能够有效地访问和操作数据。以下是文件系统的主要概念和功能:

  1. 文件(File)

    • 文件是数据的基本单位,可以是文本文件、图像、音频、视频等各种类型的数据。
    • 每个文件都有一个唯一的名称(文件名)和相关的元数据,如文件大小、创建时间、修改时间等。
  2. 目录(Directory)

    • 目录是一种特殊类型的文件,用于组织和存储其他文件和子目录。
    • 目录可以形成层次结构,允许用户创建文件夹以更好地组织和分类文件。
  3. 路径(Path)

    • 路径是描述文件或目录位置的字符串,它从根目录开始一直到目标文件或目录。
    • 绝对路径从根目录开始,相对路径从当前工作目录开始。
  4. 文件系统层次结构(File System Hierarchy)

    • 大多数操作系统使用树形结构来组织文件系统,其中根目录是顶级目录,下面可以有多个子目录和文件。
    • 不同的操作系统具有不同的文件系统层次结构,例如,Linux系统使用的是类似于"/"的根目录,而Windows系统使用的是类似于"C:"的根目录。
  5. 文件权限(File Permissions)

    • 文件系统通常提供了对文件和目录的访问控制,这些权限规定了哪些用户或进程可以读取、写入或执行文件。
    • 常见的文件权限包括读(read)、写(write)、执行(execute)权限。
  6. 文件操作(File Operations)

    • 文件系统允许用户和应用程序执行各种操作,如创建、复制、移动、删除文件和目录。
    • 文件系统还支持文件的打开、关闭、读取和写入等操作。
  7. 磁盘管理(Disk Management)

    • 文件系统负责在物理存储设备上管理数据的分布和存储。
    • 这包括文件的存储分配、磁盘空间的管理、文件的分散存储以及磁盘碎片整理。
  8. 文件系统类型(File System Types)

    • 不同的操作系统可以使用不同类型的文件系统,例如,Linux常用的文件系统包括EXT4、XFS、Btrfs,而Windows使用的是NTFS。
    • 文件系统的选择取决于操作系统的需求和性能要求。
  9. 网络文件系统(Network File Systems)

    • 文件系统还可以通过网络访问,允许用户从远程计算机访问文件和目录,这称为网络文件系统(NFS)或类似的协议。

文件系统是计算机操作系统的核心组件之一,它为用户和应用程序提供了一种方便的方式来管理和操作数据。不同的操作系统和文件系统类型可能具有不同的特性和功能,但它们的基本目标都是提供高效、可靠和安全的数据存储和访问机制。

第二章

第二章主要介绍了文本编辑器的使用、程序开发、C语言中的函数调用、C语言程序与汇编代码的链接、链接库、Makefile、GBD、以及大二是数据结构学的结构体、链表、树等知识

自学总结

EMACS

下载完后第一次使用
在这里插入图片描述

编写一个helloworld程序

数据结构课程学过的知识再次不再赘述,直接去找GPT玩——苏格拉底挑战

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最终评价
在这里插入图片描述

学习过程中遇到的问题

虚拟机太久不用不能正常启动

首先向GPT问了一下,但是它给出的方法似乎并不奏效
在这里插入图片描述
在这里插入图片描述
于是去CSDN上找大佬文章参考了一下,解决方法参考链接: 这里参考了方法一

我在网上找到的GPT是API模型,对于API模型到底是什么的问题,我还有些不清楚,于是我也请教了gpt

在这里插入图片描述

总结

本次学习主要学了课本一二章,第一章是对本书学习的总体介绍,第二章是一些编程背景,其中很多都是大二学过的课程,其他的老师在课上也有演示,跟着GPT的指引EMACS下载也很简单,整体是一次不难但是收获满满的学习,本次学习共与GPT对话58次,多数是有效问答,但是也有少数“人工智障”的情况,我让他向我提问它可能还反问我的问题是什么,一是说明我用的这个版本不够先进,另外也说明我的promote技巧需要提升。
在这里插入图片描述

posted @ 2023-09-10 21:31  20211315邹雪梅  阅读(9)  评论(0编辑  收藏  举报