首页
学习
活动
专区
工具
TVP
发布

TechBox

专栏成员
86
文章
680056
阅读量
39
订阅数
《现代操作系统》——内存管理
内存管理是操作系统中经典的话题。小型嵌入式系统一次只需要执行一个任务,对内存管理没有要求。现代的操作系统通常要同时执行多个进程,多个进程所占用的内存之和通常超出物理内存的容量大小。即便内存容量也在不断的增长,但始终跟不上软件体积膨胀的速度。甚至有些庞大的程序所需要的内存就足以塞满整个物理内存空间。所以,现代操作系统的设计者就要想办法来调和系统的多任务同时运行、软件体积膨胀和有限的物理内存容量之间的冲突,想尽办法做到鱼和熊掌兼得。这就是本文所介绍的操作系统的内存管理。本文所介绍的主要是:
VV木公子
2021-10-05
9060
《现代操作系统》—— 调度
现代计算机都是多道程序设计系统。在多道程序设计系统中,通常会有多个进程或线程同时竞争同一个CPU。只要有2个或更多的进程处于就绪状态,那么这种情形就发生了:CPU必须要在多个就绪的进程中选择下一个要运行的程序。在操作系统中,完成这个选择工作的程序叫做调度程序(scheduler)。该程序使用的算法叫做调度算法。 许多适用于进程调度的方法同样也适用于线程调度。内核管理线程的时候,调度是按照线程级别进行的,与线程所属的进程没有关联。本文主要讨论同样适用于进程和线程调度的问题。然后介绍线程调度所独有的问题。本文讨论的问题假设机器是单CPU单核。
VV木公子
2021-10-05
1.1K0
《现代操作系统》—— 死锁
在计算机系统中有很多独占性的资源,在任何一个时刻它们都只能被一个进程使用。比如硬件资源:打印机、扫描仪、光驱。也有一些软件资源:数据库表中的某一个记录、文件系统中某些文件等。两个进程同时使用同一个文件系统中的某个文件会引起文件系统的瘫痪,因此操作系统都具有授权一个进程(临时)拍他的访问某一资源的能力。不然可能会因为两个进程同时请求被占用的资源而导致死锁。 本文中的资源可以是硬件资源、软件资源以及一些数据资源(也属于软件资源),死锁可能出现在软件资源和硬件资源上。 本文只讨论进程死锁,至于线程死锁,其原理基本是一样的。
VV木公子
2021-10-04
9030
《现代操作系统》—— 进程间通信问题
阅读前面的文章,我们已经知道了进程是操作系统对正在运行的程序的抽象。现代操作系统中,进程通常需要和其他进程进行通信。我们称之为进程间通信 问题。又叫做IPC(Inter Process Communication) 问题。IPC主要解决以下3个问题:
VV木公子
2021-10-02
1.1K0
《现代操作系统》—— 线程
在传统操作系统中,每个进程有一个地址空间和一个控制线程。事实上,这几乎就是对进程的定义。不过,经常存在同一个地址空间中并行运行多个控制线程的情况,这些线程就像分离的进程(或者理解为微型进程)。线程和进程的区别是进程有独立的地址空间,而线程没有。一个进程内的地址空间是其内部的所有控制线程所共享的,这也是为什么开发者要了解资源竞争、加锁、解锁、死锁等线程问题的原因之一。本文将对线程进行系统性介绍。主要包括:线程出现的意义(即线程的作用)、经典线程模型、POSIX线程(pthread)、线程的实现。 一些名词:
VV木公子
2021-10-02
8800
React Native之PureComponent
PureComponent继承自Component。PureComponent几乎和Component完全相同。
VV木公子
2020-02-18
7.6K0
利用Clang探究block捕获外部变量的本质(一)
我们知道,Objective-C的block会捕获自动变量。在计算机编程领域,自动变量(Automatic Variable)指的是局部作用域变量,即局部变量。相对于全局变量。如下,在main函数中声明一个局部变量val = 1;block中打印val的值,然后在执行block前修改val = 2;, 但是block依旧输出1。这就是所谓的block会捕获自动变量。 本篇文章主要探究block捕获局部变量的底层原理。除去函数参数外,关于block和静态变量、全局变量、静态全局变量的关系将在后面的文章展开讨论。
VV木公子
2019-11-12
7.9K0
利用Clang探究__block的本质
上一篇文章利用Clang探究block的本质得出的结论是block的本质是一个结构体对象,该对象包含调用block时要执行的函数指针。当我们在Objective-C层面调用block的时候,底层就可以通过调用block对应的C++结构体对象的函数指针来实现同等操作。
VV木公子
2019-11-04
7.3K0
利用Clang探究block的本质
block作为Objective-C语言中的一种特殊的存在,已经为大家所熟知。在其他语言中,也有类似于block的实现,比如JavaScript和Swift中的闭包,python中的lambda匿名函数。本篇文章主要讲解利用编译器前端clang来探究block的本质。关于clang的介绍请移步到LLVM简介和Objective-C源文件编译过程。
VV木公子
2019-10-22
7.3K0
Objective-C源文件编译过程
Objective-C文件的编译过程主要包括clang前端的预处理、编译、后端优化中间表示、生成汇编指令、链接、生成机器码这几个步骤。我们可以借助clang -ccc-print-phases xxx.m命令查看某个OC源文件的编译的过程,如下: 输入命令
VV木公子
2019-10-14
9.5K0
WSRouter—一款轻量级路由跳转框架
大约6个月前,笔者写了一个基于url-block的路由跳转框架,命名为WSRouter。这是一个轻量级框架,仅包含4个.m文件共400多行代码。虽然这个框架很轻,但并不代表其功能不完备,相反,这个框架的功能完全可以应付我们日常的开发需要。无论是对于项目使用还是学习参考,WSRouter都是一个不错的选择。 目前路由跳转方案有很多,有基于Target-action的跳转方案,有基于protocol-class的跳转方案,有基于url-Controller的跳转方案,还有本文所说的基于URL-Block的跳转方案。本文不对这些方案的优缺点进行对比,仅对WSRouter的基本功能和实现做一些简介,欢迎大家使用或star。为了便于陈述,基于URL-Controller和URL-Block统称为基于URL的跳转方案。
VV木公子
2019-10-08
7.2K0
Node.js简介
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js不是一种独立的语言。Node.js用JavaScript进行编程, 运行平台是包装后的js引擎(V8)。和PHP, JSP等语言不同,他们都需要运行在服务器上,例如apache,tomat,nginx,IIS,Node.js不用架设在任何服务器软件之上。
VV木公子
2019-07-31
7.5K0
Objective-C实现二分查找和插值查找
二分查找 二分查找 又称折半查找,要求数组必须是有序的数列,是一种有序查找算法。二分查找的时间复杂度是O(log n)。它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。 它的基本思想是:将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x < a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。 有时候面
VV木公子
2018-06-05
8.3K0
浅析对象等同性判断
前言 对数据的等同性判断包括对基本数据类型等同性的判断和对象等同性的判断。对基本数据类型等同性的判断是非常简单的,比如对两个NSInteger类型的变量等同性判断,我们直接使用关系运算符“==”即可。 相比于基本数据类型等同性,对象等同性的判断就稍显复杂。按照大神Mattt Thompson的说法,对象的等同性包括相等性和本体性。从字面不难发现,相等性是指:两个对象的值是否相等。本体性是指:两个对象本质上是否是同一个对象。 关系运算符"=="不仅可以应用在基本数据类型上,还可以应用在两个对象类型的对象上。
VV木公子
2018-06-05
8.2K0
cocoapods从安装到使用
CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。这么说可能还不是很理解,当我们开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,A依赖B,B又依赖C......。总之笔者的意思,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本依赖库,然后一个个重新加入到项目中,费时费力,操作繁琐且容易出错。如果能有什么工具能代替我们手工去解决这些依赖和更新问题,那我们开发效率将如有神助。这就是CocoaPods的作用。 总而言之,使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。
VV木公子
2018-06-05
15K0
数据结构与算法之线性表前言线性表
前言 上一篇《数据结构和算法之时间复杂度和空间复杂度》中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明。这一篇主要介绍线性表。 线性表属于数据结构中逻辑结构中的线性结构。回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构、几何结构、树形结构和图形结构四大结构。其中,线性表就属于线性结构。剩余的三大逻辑结构今后会一一介绍。 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列。 注意: 1.线性表是一个序列。 2.0个元素构成的线性表是空表。 3
VV木公子
2018-06-05
7.7K0
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档