无题
MIT6.S081:Lec03 OS Organization and System Calls(Frans)3.1 上一节课回顾【1】这节课的内容是操作系统的组织结构。今天我们主要讨论4个话题:
Isolation:隔离性是设计操作系统组织结构的驱动力。
Kernel和User Mode:这两种模式用来隔离操作系统内核和用户应用程序。
System Calls:系统调用是你的应用程序能够转换到内核执行的基本方法,这样你的用户态应用程序才能使用内核服务。
最后我们会看到所有的这些是如何以一种简单的方式在XV6中实现。
【2】首先我们来复习一下上节课。学习完第一课之后,你应该对操作系统的结构有个大致的认知。
首先,会有类似于Shell,echo,find或者任何你实现的工具程序,这些程序运行在操作系统之上。
而操作系统又抽象了一些硬件资源,例如磁盘,CPU。
通常来说操作系统和应用程序之间的接口被称为系统调用接口(System call interface),我们这门课程看到的接口都是Unix风格的接口。基于这些Unix接口,你们在lab1中,完成了不同的应用程序。
lab ...
无题
225. 用队列实现栈力扣题目链接(opens new window)
使用队列实现栈的下列操作:
push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
注意:
你只能使用队列的基本操作– 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// 使用两个队列实现package maintype MyStack struct { // 创建两个队列 queue1 []int queue2 []int ...
无题
232.用栈实现队列力扣题目链接(opens new window)
使用栈实现队列的下列操作:
push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。
示例:
123456MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package main// 队列先进先出// 所以必须在两个数组中互相转换才能保证这样的顺序// 定义一个结构体(相当于Java的自定义类),用来保存出入栈数据type MyQueue struct ...
无题
27. 移除元素力扣题目链接(opens new window)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。
示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
你不需要考虑数组中超出新长度后面的元素。
1234567891011121314151617func removeElement(arr []int, val int) int { aLen := len(arr) for i := 0; i < aLen; i++ { if arr ...
无题
28. 实现 strStr()给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1: 输入: haystack = “hello”, needle = “ll” 输出: 2
示例 2: 输入: haystack = “aaaaa”, needle = “bba” 输出: -1
说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
12345678910111213141516171819// 暴力解func strStr(haystack string, needle string) int { hLen := len(haystack) nLen := len(needle) for i := 0; i < hLen; i++ { temp ...
无题
459.重复的子字符串力扣题目链接(opens new window)
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。
示例 2:输入: “aba”输出: False
示例 3:输入: “abcabcabcabc”输出: True解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)
1234567891011121314151617func repeatStr(str string) bool { temp := "" for i := 0; i < len(str); i++ { if i > len(str)/2 { return false } temp += string(str[i]) temp2 := temp for j := 0; j < len(str)/(i+1 ...
无题
MIT6.S081:Lec01 Introduction and Examples1.1 课程内容简介【1】课程目标
理解操作系统的设计和实现。设计是指整体的结构,实现是指具体的代码长什么样。对于这两者,我们都会花费大量时间讲解。
为了深入了解具体的工作原理,你们可以通过一个小的叫做XV6的操作系统,获得实际动手经验。通过研究现有的操作系统,并结合课程配套的实验,你可以获得扩展操作系统,修改并提升操作系统的相关经验,并且能够通过操作系统接口,编写系统软件。
【2】操作系统的共同目标(why os?do what?)
抽象硬件(Abstract Hardware):通常来说,你买的一台计算机里面包含了CPU、内存,但是这是一种非常低层级的资源。幸好我们有一些应用程序实现了高层级的接口和抽象,例如进程、文件系统。这些高层级的接口和抽象方便了应用的开发,也提供了更好的移植性。
多路复用(Multiplex):即在多个应用程序之间共用硬件资源。你可以在一个操作系统同时运行文本编辑器,程序编译器,多个数据库等等。操作系统能非常神奇的在不相互干扰的前提下,同时运行这些程序。
隔离性(Is ...
无题
计算机网络第六章:应用层6.1 应用层概述
1、在计算机网络体系结构中,应用层的主要功能是(B)
A、实现进程之间基于网络的通信
B、通过进程之间的交互来实现特定网络应用
C、实现分组在多个网络上传输
D、透明传输比特流
2、以下不属于TCP/IP体系结构应用层范畴的是(D)
A、HTTP
B、DNS
C、DHCP
D、UDP
6.2 客户-服务器方式和对等方式
1、用户提出服务请求,网络将用户请求传送到服务器;服务器执行用户请求,完成所要求的操作并将结果送回用户,这种工作方式称为(A)
A、C/S方式
B、P2P方式
C、CSMA/CD方式
D、PPP方式
2、以下有关P2P方式的叙述中,错误的是(D)
A、没有固定的服务请求者和服务提供者
B、对等方相互之间直接通信
C、每个对等方既是服务的请求者,又是服务的提供者
D、基于P2P的应用是服务集中型的,因为服务集中在少数几个服务器计算机中
6.3 动态主机配置协议DHCP
...
无题
计算机网络第五章:运输层5.1 运输层概述
1、运输层为(B)之间提供逻辑通信服务
A、主机
B、进程
C、路由器
D、操作系统
2、在TCP/IP体系中,运输层的主要作用是在互联网络的源主机和目的主机对等实体之间建立用于会话的(C)
A、点到点连接
B、操作连接
C、端到端连接
D、控制连接
5.2 运输层端口号、复用与分用的概念
1、在TCP/IP中,采用(A)来区分不同的应用进程。
A、端口号
B、IP地址
C、协议类型
D、MAC地址
2、在TCP/IP网络中,为各种熟知应用保留的端口号范围是(B)
A、1~255
B、0~1023
C、1~1024
D、1~65535
3、在TCP/IP中,运输层端口号的范围是(D)
A、1~255
B、0~1023
C、1~1024
D、0~65535
5.3 UDP和TCP的对比
...
无题
541. 反转字符串II给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2输出: “bacdfeg”
12345678910111213141516171819202122232425262728293031323334func reverseString(str string, k int) string { count := len(str) / (2 * k) if count >= 1 { length := count * (2 * k) index := 0 // 有多个2k for temp := count; temp > 0; temp-- { runes := reverse(str, index, index+k-1) str = string(runes) ...