Kubernetes 实战 | 安装 Ingress Controller
可以看到之前安装的 Kubernetes Dashboard Web UI 没有办法直接在集群外部访问,这是由于 Kubernetes 默认 Service 提供的访问方式是 ClusterIP,也就是在集群内部通过虚拟 IP 访问。这个 IP 在集群外是无法访问的。当然,我们可以使用 NodePort 方式来提供 Service 服务,但是这样的话我们就需要在机器上自己设置反向代理,比较麻烦。 什么是 IngressKubernetes 使用 Ingress 的方式解决了这个问题。Ingress 也是集群上的一种资源,用来路由外部的流量到集群内部的 Service。 一个 Ingres...
Kubernetes 实战 | 安装 Dashboard
通过命令行方式管理 Kubernetes 集群不太直观,因此 Kubernetes 官方推出了 Kubernetes Dashboard 这一个 Web UI 工具方便我们执行管理集群相关的操作。 安装 Web UI执行官方提供的一键脚本就可以安装 Kubernetes Dashboard 了: 1kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta1/aio/deploy/recommended.yaml 此时由于 Dashboard 是部署在集群内部的,外部无法直接访问...
ucore OS | 实验 8 文件系统
这次实验课上布置了另外的任务,即实现 MTFQ 以及工作集算法。 在实验过程中,发现 ucore 并没有对用户进程 swap 提供支持,因此加入了一些修正。 练习 1 完成 ucore 文件系统读文件操作的实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849// 处理一开始的块if ((blkoff = offset % SFS_BLKSIZE) != 0 ) { if (nblks != 0) { // 不在一块里 ...
ucore OS | 实验 7 同步互斥
练习 1 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题内核级信号量实现位于 sem.c 中: 12345678910booltry_down(semaphore_t *sem) { bool intr_flag, ret = 0; local_intr_save(intr_flag); if (sem->value > 0) { sem->value --, ret = 1; } local_intr_restore(intr_flag); return ret;} ...
ucore OS | 实验 6 调度器
练习 1 使用 Round-Robin 调度算法123456789101112131415161718192021222324// The introduction of scheduling classes is borrrowed from Linux, and makes the // core scheduler quite extensible. These classes (the scheduler modules) encapsulate // the scheduling policies. struct sched_class { // the nam...
ucore OS | 实验 5 用户进程管理
练习 1 加载应用程序并执行在 load_icode 中,前面的函数体负责初始化内存内容和拷贝相应的内容到内存中,最后需要一种方法,使得 CPU 可以从用户进程入口处开始运行。 123456tf->tf_cs = USER_CS;tf->tf_ds = tf->tf_es = tf->tf_ss = USER_DS;tf->tf_esp = USTACKTOP;tf->tf_eip = elf->e_entry;tf->tf_eflags = FL_IF;ret = 0; 在中断返回之后,CPU 会使用 trapframe 中的值设置寄存...
ucore OS | 实验 4 内核线程管理
练习 1 分配并初始化一个进程控制块12345678910111213141516171819202122232425262728293031323334static struct proc_struct *alloc_proc(void) { struct proc_struct *proc = kmalloc(sizeof(struct proc_struct)); if (proc != NULL) { /* * below fields in proc_struct need to be initialized * enum ...
ucore OS | 实验 3 虚拟内存管理
练习 1 给未被映射的地址映射上物理页12345678910111213141516intdo_pgfault(struct mm_struct *mm, uint32_t error_code, uintptr_t addr) { // ... pte_t *ptep=NULL; if (!(ptep = get_pte(mm->pgdir, addr, 1))) goto failed; //(1) try to find a pte, if pte's PT(Page Table) isn't existe...
ucore OS | 实验 2 物理内存管理
练习 1 实现 First-Fit 连续物理内存分配算法First-Fit 连续物理内存分配算法实现比较简单。操作系统维护一个空闲页的链表,链表项根据对应地址从小到大进行排序。链表中的每一项包含的信息是连续空闲空间的第一页,同时 struct Page 中的 property 在 First-Fit 算法中意味着该连续空闲空间共有多少页。而在 flags 中,property 被置位的话,意味着这一页是连续空闲空间的第一页,Reserved 表示该页被操作系统保留,不能进行分配或者释放。在内存探测完成之后,所有的页都被保留了,需要在初始化函数中将其清零,否则不能被其他程序使用。 1234...
ucore OS | 实验 1 ucore 的启动过程
练习 1 操作系统镜像文件 ucore.img 是如何一步一步生成的? 通过执行命令 make V="",使 make 显示出编译过程中执行的命令: 12345678910111213141516171819202122232425+ cc kern/init/init.cgcc -Ikern/init/ -fno-builtin -fno-PIC -Wall -ggdb -m32 -gstabs -nostdinc -fno-stack-protector -Ilibs/ -Ikern/debug/ -Ikern/driver/ -Ikern/trap/ -Ike...