进程间通信

【Linux】系统调用简单了解

不问归期 提交于 2020-01-26 22:55:57
系统调用决定了操作系统是否好用,功能是否齐全。 进程管理 创建进程:fork 原进程叫父进程,新进程叫子进程。 当父进程fork创建子进程时,采用写时拷贝的方案。先是父子共用同一内存,如果有一方要写数据,就会将该内存块进行拷贝。然后再写。 fork可以根据返回值进行对父子进程的区分。 返回0,说明是子进程。 返回非0,说明是父进程,返回的值为子进程的进程号。 子进程可以使用 exec函数族 去执行另一个程序。 父进程可以通过 waitpid系统调用 ,通过传入子进程进程号,来让父进程知道子进程的运行状态。 内存管理 每个进程都有自己独立的内存空间。 该内存空间会放入程序的代码(代码段),程序的数据(数据段)。 (这里牵扯到物理分段分页问题) 在 堆 分配内存的时候使用的系统调用, brk和mmap 。 brk分配的内存是和原来的堆连在一起的,通过调整堆的上线来扩大堆。 mmap是在映射区重新划分一块内存区域。 文件管理 在Linux下一切皆文件。 程序,进程:可执行二进制文件 配置文件:文本文件 进程间通信的管道,Socket:也是文件 设备的存储形式也是吻技安。 每一个文件,Linux都会分配一个文件描述符(一个整数),我们一般通过这个文件描述符来使用系统调用。 信号 程序执行过程中遇到异常等情况就会发生中断,发送信号给进程,进程收到信号后进一步处理。 一般不重要的会忽略

并发、并行与C++多线程——基础一

拈花ヽ惹草 提交于 2020-01-26 17:45:50
1、什么是并发? 并发指的是两个或多个独立的活动在同一时段内发生。生活中并发的例子并不少,例如在跑步的时候你可能同时在听音乐;在看电脑显示器的同时你的手指在敲击键盘。这时我们称我们大脑并发地处理这些事件,只不过我们大脑的处理是有次重点的:有时候你会更关注你呼吸的频率,而有时候你更多地被美妙的音乐旋律所吸引。这时我们可以说大脑是一种并发设计的结构。这种次重点在计算机程序设计中,体现为某一个时刻只能处理一个操作。 2、什么是并行? 与并发相近的另一个概念是 并行 。它们两者存在很大的差别。并行就是 同时执行 ,计算机在 同一时刻 ,在某个时间点上处理两个或以上的操作。判断一个程序是否并行执行,只需要看某个时刻上是否多两个或以上的工作单位在运行。一个程序如果是单线程的,那么它无法并行地运行。利用多线程与多进程可以使得计算机并行地处理程序(当然 ,前提是该计算机有多个处理核心)。 3、并发与并行的显著区别: 并发:同一时间段内可以交替处理多个操作。 并行:同一时刻内同时处理多个操作。 并发的程序设计,提供了一种方式让我们能够设计出一种方案将问题(非必须地)并行地解决。如果我们将程序的结构设计为可以并发执行的,那么在支持并行的机器上,我们可以将程序并行地执行。因此,并发重点指的是程序的设计结构,而并行指的是程序运行的状态。并发编程,是一种将一个程序分解成小片段独立执行的程序设计方法。 . 4

进程间通信二:管道技术之输入输出重定向

。_饼干妹妹 提交于 2020-01-26 06:10:23
转载自: http://blog.csdn.net/morewindows/article/details/7390350 本篇将介绍 输入输出的重定向问题, 先来看一个小小的实例,设有一个程序,该程序的输入输出为标准输入输出即从键盘上输入,输出到屏幕。现在要重定向输入法输出,使程序从文件中读取数据,处理后输出到文件。程序代码如下(称此程序为示例程序): [cpp] view plain copy #include <stdio.h> int main() { int n; while (scanf( "%d" , &n) != EOF) //标准输入时,可按ctrl+z来输入EOF { n *= 2; printf( "%d\n" , n); } } 试给出几种不同的实现方法,另外如果没有程序代码,只有可执行文件,又应该如何做了? 实现方法一使用C语言的freopen()函数 函数功能:重定向控制台的输入输出 函数原型: FILE * freopen ( const char * path , const char * mode , FILE * stream ); 函数说明: 第一个参数为文件指针(也可以用来指向标准输入输出)。 第二个参数为打开方式, "w" 表示 写, "r" 表示 读, "a" 表示 追加。其它设置可以参考 MSDN 。 第三个参数为 FILE 类型的指针

Android 进阶之跨进程通信(IPC)

孤街醉人 提交于 2020-01-26 00:18:46
先看一下 Android 中跨进程通信的方式: 名称 优点 缺点 使用场景 Intent 简单易用 只能传输 Bundle 所支持的数据类型 四大组件的进程间通信 文件共享 简单易用 不适合高并发 简单的数据共享,无高并发场景 AIDL 功能强大,支持一对多并发实时通信 使用稍微复杂,需要注意线程同步 复杂的进程间调用,Android 中最常用 Messenger 比AIDL稍微简单易用些 比AIDL功能弱,只支持一对多串行实时通信 简单的进程间通信 ContentProvider 强大的数据共享能力,可通过call方法扩展 受约束的AIDL,主要对外提供数据线的CRUD操作 进程间的大量数据共享 RemoteViews 在跨进程访问UI方面有奇效 比较小众的通信方式 某些特殊的场景 Socket 跨主机,通信范围广 只能传输原始的字节流 常用于网络通信中 Binder Binder 是 Android 系统进程间通信(IPC)方式之一。 参考: 1. Android Bander设计与实现 - 设计篇 2. 图文详解 Android Binder跨进程通信的原理 Messenger Messenger 是一种轻量级的 IPC 方案并对 AIDL 进行了封装,它实现起来比较容易。 参考: 用Messenger进行进程间通信 AIDL 在 AIDL 文件中支持的数据类型包括:

Android - Android 面试题集 -- Android 部分答案

萝らか妹 提交于 2020-01-24 05:19:22
2.1 Activity 1.Activity是什么? Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。 当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。 2.典型情况下的Activity生命周期? Activity启动–>onCreate()–>onStart()–>onResume() 点击home键回到桌面–>onPause()–>onStop() 再次回到原Activity时–>onRestart()–>onStart()–>onResume() 退出当前Activity时–>onPause()–>onStop()–>onDestroy() 3.异常情况下的Activity的生命周期 & 数据如何保存和恢复? 在onStop之前调用onSaveInstanceState保存当前Activity状态,当Activity被重新创建后,系统调用 onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象 作为参数传递给onRestoreInstanceState和onCreate方法 onRestoreInstanceState的调用时机发生在onStart之后

浅析-探究Android世界 APP启动的奥秘一

拟墨画扇 提交于 2020-01-23 03:58:17
走进Android世界,指尖轻轻的触碰即可打开一个个缤纷多彩的应用,即可享受极致的交互体验。到底是谁在背后操纵这一切,默默维护着秩序? 角色登场: 系统服务: ActivityManagerService (AMS管理组件生命周期等); WindowManagerService(WMS管理窗口展示); PackageManagerService (PKMS记录并管理所有包体相关信息): 应用概念:Application (实际作用域:更加贴合进程; 若APP中有多个进程,则会创建多个Application) 主线程:ActivityThread (应用的主线程,承接了与AMS服务交互(AMS通过ApplicationThread与应用进程交互),于此同时调度当前进程中的组件周期变化) 组件:Activity,Service,ContentProvider, BroadCast 关系分解: (1) 系统服务与四大组件 : Android系统中设计不同服务的管理,如AMS,WMS,PKMS等,其目的是统筹对所有运行在系统上的应用进行管控。于此同时,系统服务框架的构建屏蔽了开发者开发应用需向底层交互的细节。系统服务搭建了一套快速构建应用的模板(就是我们常用的四大组件) 而每个组件都是职责明确的: Activity主要维系用户交互, Service主要用于长时间驻留后端处理事务,

并发编程的理论基石

China☆狼群 提交于 2020-01-22 21:21:56
一、进程和线程 1.操作系统、进程、线程的关系 操作系统是包含多个进程的容器,而每个进程又是容纳多个线程的容器。 2.Oracle 官方定义 官方定义 进程:使用 fork(2) 系统调用创建的UNIX 环境(例如文件描述符,用户 ID 等),它被设置为运行程序。 线程:在进程上下文执行的一系列指令。 3.什么是进程 进程(Process)是程序的运行实例。 进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位。 在用户下达运行程序的命令后,就会产生进程,任务管理器中的每一个应用都是一个进程。谷歌浏览器的每个标签页和插件都是一个进程。 4.什么是线程 线程是操作系统能够进行资源调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,每个线程执行的都是进程代码的某个片段,特定的线程总是在执行特定的任务。 5.进程和线程的关系 5.1 起源不同 先有进程,后有线程。进程由于资源利用率、公平性和便利性诞生。处理器的速度往往比外设的速度快(键盘、鼠标等),为了提高 CPU 的利用率,诞生了线程,目的就是为了提高程序的执行效率。 5.2 概念不同 进程是资源分配的最小单位。 线程是程序执行的最小单位(线程是操作系统能够进行资源调度的最小单位,同个进程中的线程也可以被同时调度到多个 CPU 上运行),线程也被称为轻量级进程。 5.3 内存共享方式不同 默认情况下

恶意代码特征

亡梦爱人 提交于 2020-01-22 09:33:21
0x01加壳 判断方法: 1.节区名字 2.熵  加过壳的可执行文件有的节区为空熵等于0,可能所有数据全在一个一个节区里(大于0-7) 0x02行为 探查行为 FindFirstFile() FindNextFile()获取特定目录中所有文件列表 Process32First() Process32Next()获取当前系统中运行的进程列表  函数存在于kernel32.dll 攻击行为 1.进程创建 创建进程,运行攻击命令,进程名修改为类似系统正常进程.或者远程下载恶意代码  CreateProcess() 2.文件处理 创建恶意文件运行所需的新文件,伪造删除特定文件 CreateFile() ReadFile() WriteFile() DeleteFile() 3.钩取 拦截系统设备或进程间通信的信息,事件. SetWindowsHookEx() 通信行为 WSASocket(),bind(),connect(),listen(),send(),recv() wsock32.dll es2_32.dll InternetOpenUrl()等               wininet.dll 隐匿行为 Rootkit技术使用API SetwindowsHHookEx(),VirtualAllocEx(),CreateRemoteThread(),OpenProcess()

操作系统概念- Silberschatz 期末复习

我是研究僧i 提交于 2020-01-22 05:47:13
第一章——导论 1>操作系统是一组控制和管理计算机软硬件资源,合理地对各类作业进行调度,及方便用户的程序集合。 用户视角:为用户方便,不在乎资源使用率; 系统视角:资源分配器 &控制程序; 2>陷阱: 软中断,来自出错(除数为0/无效存储访问..)和用户程序的特别请求、系统调用。 中断:来自硬件。 3>os结构 ①多道程序设计 ②分时系统:操作系统将时间划分为若干时间在用户之间快速切换,这种快速切换使得用户感到整个系统只为自己所用,以时间片为单位,且因为频度高,用户可以在程序运行期间与之进行交互。 4>特权指令:特权指令是拥有特殊权限的指令,用于调用系统函数或系统软件等,因为在执行程序时,为了方式用户随意调用特权指令,系统又分成了用户态和核心态。由此延申模式位,1:用户态,0:内核模式,用于保证特权指令只能由操作系统完成,保护操作系统和用户程序不受错误用户程序的影响。 5>高速缓存一致性 6>上下文切换, CPU 从一个 进程 或线程切换到另一个进程或线程,不可以在用户态实现,而系统调用是操作系统提供的服务,用户态可以使用。 第二章——操作系统结构 1>系统调用:OS内核提供一系列的预定功能,通过一组称为系统调用的接口来呈现给编程人员,相应内核函数完成处理并返回给编程人员;它把应用程序请求传给内核,其相应内核函数完成处理并返回给程序;系统调用是内核的一部分。

每周一个 Python 标准库 | signal

拥有回忆 提交于 2020-01-21 22:54:34
技术博客:https://github.com/yongxinz/tech-blog 同时,也欢迎关注我的微信公众号 AlwaysBeta ,更多精彩内容等你来。 信号是 Unix 系统中常见的一种进程间通信方式(IPC),例如我们经常操作的 kill -9 pid ,这里的 -9 对应的就是 SIGKILL 信号,9 就是这个信号的编号,SIGKILL 是它的名称。 由于不同版本的 *nux 的实现会有差异,具体请参照系统 API,可以使用 man 7 signal 查看所有信号的定义。 那么,信号有哪些使用场景呢?与其他进程间通信方式(例如管道、共享内存等)相比,信号所能传递的信息比较粗糙,只是一个整数。但正是由于传递的信息量少,信号也更便于管理和使用,可以用于系统管理相关的任务。例如通知进程终结、中止或者恢复等。每种信号用一个整型常量宏表示,以 SIG 开头,比如 SIGCHLD、SIGINT 等。 接收信号 Python 中使用 signal 模块来处理信号相关的操作,定义如下: signal . signal ( signalnum , handler ) signalnum 为某个信号,handler 为该信号的处理函数。进程可以无视信号,可以采取默认操作,还可以自定义操作。当 handler 为 signal.SIG_IGN 时,信号被无视(ignore);当