华清IOday3 24-7-30

1> 使用文件IO完成,将源文件中的所有内容进行加密(大写转小写、小写转大写)后写入目标文件中源文件内容不变

#include 
int main(int argc, const char *argv[])
{
	if (argc != 3)//判断是否输入的是3个文件
	{
		printf("input file error\n");
		return -1;
	}
	int src = -1;
	if ((src = open(argv[1], O_RDONLY)) == -1)//以只读的方式打开文件
	{
		perror("src open error");
		return -1;
	}
	int dest = -1;
	if ((dest = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, 0665)) == -1)//以w+的方式打开文件,要是没有改文件就创建该文件,权限为0665
	{
		perror("dest open errorror");
		return -1;
	}
	char buf;
	while (read(src, &buf, sizeof(buf)) != 0)//遍历文件
	{
		if (buf <= 'z' && buf >= 'a')//遇到小写将改字符转化为大写
		{
			buf = buf - 32;
			write(dest, &buf, sizeof(buf));
		}
		else if (buf <= 'Z' && buf >= 'A')//遇到大写把改字符转化为小写
		{
			buf = buf + 32;
			write(dest, &buf, sizeof(buf));
		}
		else
		{
			write(dest, &buf, sizeof(buf));
		}
	}
	//关闭文件
	close(src);
	close(dest);
	return 0;
}

华清IOday3 24-7-30_第1张图片

2> 查资料了解以下概念:

并发和并行的区别

  1. 并发(Concurrency)

    • 并发是指在计算机系统中,多个任务或进程在宏观上同时执行,但在微观上是交替执行的。
    • 并发的关键在于任务的切换非常快,给用户或系统本身一种多个任务同时进行的错觉。
    • 并发可以在单核处理器上实现,通过时间分片或多任务处理来实现任务的快速切换。
  2. 并行(Parallelism)

    • 并行是指在计算机系统中,多个任务或操作在物理上同时执行。
    • 并行需要多核处理器或多台计算机来实现,每个核心或计算机可以独立执行一个任务或操作。
    • 并行可以显著提高计算效率,因为多个任务可以同时进行,而不是交替执行。

简单来说,并发是逻辑上的“同时”,而并行是物理上的“同时”。并发可以通过操作系统的调度机制在单个处理器上实现,而并行则需要多个处理器或核心来实现。两者都是提高系统性能和资源利用率的重要概念。

什么是进程

进程(Process)是计算机科学中的一个基本概念,它指的是在操作系统中执行的程序的实例。以下是进程的一些关键特点:

  1. 程序与进程的区别

    • 程序是一组静态的指令,存储在磁盘或内存中,是被动的代码集合。
    • 进程是程序的动态执行实例,是操作系统进行资源分配和调度的一个独立单位。
  2. 地址空间

    • 每个进程都有自己的地址空间,这意味着它拥有自己的代码、数据和堆栈。
  3. 独立性

    • 进程之间是相互独立的,一个进程的崩溃通常不会影响其他进程。
  4. 资源分配

    • 操作系统为每个进程分配必要的资源,如内存、输入/输出设备等。
  5. 进程状态

    • 进程在其生命周期中会经历不同的状态,如运行态、就绪态、阻塞态等。
  6. 进程控制块(PCB)

    • 操作系统使用进程控制块来存储进程的相关信息,如进程状态、程序计数器、寄存器集合、调度信息等。
  7. 进程间通信(IPC)

    • 不同进程可以通过进程间通信机制来交换数据和信息。
  8. 进程调度

    • 操作系统的调度程序负责决定哪个进程获得CPU时间,以及何时切换进程。
  9. 多任务处理

    • 现代操作系统支持多任务处理,允许多个进程同时运行,提高系统效率。

进程是操作系统资源管理和任务调度的基本单位,它们使得多个程序能够在同一台计算机上同时运行,而互不干扰。

进程和程序的区别

进程和程序是两个在计算机科学中经常使用但含义不同的术语。以下是它们的主要区别:

  1. 定义

    • 程序:程序是一组指令的集合,这些指令被编写来完成特定的任务,通常存储在磁盘或其他存储介质上。程序本身是静态的,不包含任何状态信息。
    • 进程:进程是程序的执行实例,是操作系统进行资源分配和调度的一个独立单位。它是动态的,拥有自己的内存空间、执行状态和系统资源。
  2. 存储

    • 程序通常存储在磁盘上,直到被加载到内存中才开始执行。
    • 进程存在于内存中,包括程序代码、程序计数器、寄存器、堆栈等信息。
  3. 执行

    • 程序本身不执行任何操作,它需要被加载到内存并由操作系统创建一个进程来执行。
    • 进程是程序在执行时的实体,它包含了程序的代码和执行所需的所有状态信息。
  4. 独立性

    • 程序不具备独立性,它只是一组指令。
    • 进程是独立的,每个进程都有自己的地址空间和系统资源。
  5. 生命周期

    • 程序的生命周期与文件系统相关,只要文件存在,程序就存在。
    • 进程的生命周期是由操作系统管理的,从创建到执行再到终止。
  6. 并发性

    • 程序本身不具备并发性。
    • 进程可以并发执行,操作系统可以同时管理多个进程。
  7. 系统资源

    • 程序不直接使用系统资源,它需要通过进程来访问。
    • 进程可以直接使用CPU、内存、I/O等系统资源。
  8. 错误影响

    • 程序的错误通常不会影响系统,除非它被加载并执行。
    • 进程的错误可能会影响整个系统,如内存泄漏或非法访问可能会导致系统崩溃。

总结来说,程序是一组静态的指令集合,而进程是这些指令在执行时的动态实体。程序是被动的,进程是主动的。操作系统通过进程来实现程序的执行和管理。

进程的状态有哪些

进程的状态描述了进程在生命周期中的不同阶段。操作系统会根据进程的活动情况将其置于不同的状态。以下是一些常见的进程状态:

  1. 创建状态(New or Initialization)

    • 进程正在被创建,操作系统正在为其分配资源,如内存空间。
  2. 就绪状态(Ready)

    • 进程已经准备好执行,等待操作系统调度分配CPU时间。进程处于就绪状态时,缺少的只是CPU时间。
  3. 运行状态(Running)

    • 进程正在获得CPU时间并执行指令。在单核系统中,一次只有一个进程处于运行状态。
  4. 阻塞状态(Blocked or Waiting)

    • 进程正在等待某个事件的发生,如I/O操作完成、信号量或互斥锁的释放等。在等待期间,进程不能执行。
  5. 终止状态(Terminated)

    • 进程已经完成其任务或被操作系统强制终止,将很快被操作系统从系统中移除。
  6. 挂起状态(Suspended or Stopped)

    • 进程被操作系统挂起,通常是因为系统资源不足或用户请求。挂起的进程不能执行,但可以被恢复到就绪状态。
  7. 僵尸状态(Zombie)

    • 进程已经完成执行,但父进程尚未读取其退出状态。僵尸进程占用系统资源,但不再执行。
  8. 睡眠状态(Sleeping)

    • 进程在等待某个条件成立或某个时间间隔过去,主动放弃CPU时间,进入睡眠状态。
  9. 死锁状态(Deadlock)

    • 两个或多个进程在等待对方释放资源,但都没有进展,形成了死锁。
  10. 可中断睡眠状态(Interruptible Sleeping)

    • 进程在等待某个条件,但可以被中断。例如,等待用户输入时,如果收到信号,进程可以被唤醒。
  11. 不可中断睡眠状态(Uninterruptible Sleeping)

    • 进程在等待某个条件,但不能被中断。例如,等待磁盘I/O操作完成。

不同的操作系统可能使用不同的术语来描述这些状态,但基本概念是相似的。进程状态的转换通常由操作系统的调度程序控制,以确保系统资源的有效利用和进程的合理调度。

系统中的多个进程的调度机制都有哪些

操作系统中的进程调度是决定哪个进程获得CPU时间的机制。以下是一些常见的进程调度机制:

  1. 先来先服务调度(FCFS, First-Come, First-Served)

    • 按照进程到达的顺序进行调度,先到达的进程先执行。
  2. 短作业优先调度(SJF, Shortest Job First)

    • 优先调度预计执行时间最短的进程,可以减少平均等待时间。
  3. 优先级调度(Priority Scheduling)

    • 根据进程的优先级进行调度,优先级高的进程先执行。
  4. 时间片轮转调度(RR, Round Robin)

    • 每个进程被分配一个固定的时间片,所有进程轮流执行它们的时间片。
  5. 多级队列调度(MLQ, Multi-Level Queue)

    • 将进程分配到不同的队列中,每个队列有自己的调度算法。
  6. 多级反馈队列调度(MFQ, Multi-Level Feedback Queue)

    • 结合了时间片轮转和优先级调度,允许进程在队列之间移动。
  7. 基于优先级的抢占式调度(Preemptive Priority Scheduling)

    • 如果一个高优先级的进程到达,它将抢占当前正在执行的低优先级进程的CPU。
  8. 公平共享调度(Fair Share Scheduling)

    • 确保每个进程或用户获得公平的CPU时间分配。
  9. 实时调度(Real-Time Scheduling)

    • 为满足实时任务的时限要求,实时调度通常具有高优先级和抢占式特性。
  10. 完全公平调度(CFS, Completely Fair Scheduling)

    • Linux内核中使用的调度算法,旨在为所有进程提供公平的CPU时间分配。
  11. 自适应调度(Adaptive Scheduling)

    • 根据进程的行为动态调整其优先级,例如,如果一个进程长时间处于就绪状态而没有执行,它的优先级可能会提高。
  12. 批处理调度

    • 主要用于批处理系统,优化CPU利用率和吞吐量,而不是响应时间。

每种调度机制都有其优势和适用场景。例如,时间片轮转调度适合时间共享系统,因为它可以保证所有进程公平地获得CPU时间;而实时调度则适用于对时间敏感的应用,如控制系统或多媒体应用。操作系统会根据其设计目标和运行环境选择最合适的调度算法。

3> 思维导图

你可能感兴趣的:(华清学习记录,java,前端,服务器)