自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (3)
  • 收藏
  • 关注

原创 Windows 下查看进程下所有线程

1:首先安装 PSList     https://technet.microsoft.com/en-us/sysinternals/bb896682.aspx2:把PSlist 放到 Windows\System32 文件夹下3:执行  PSlist  -dmx  PID pslist expwould show statistics

2017-04-25 11:30:03 4135

转载 线程安全

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据===========================================================

2017-04-21 09:23:47 232

原创 CMD 命令输出保存到TXT文件

1:如果覆盖 file  在命令后面加 >符号 2:如果不覆盖file append 方式在命令后面加 >>

2017-04-20 09:58:41 11058

原创 端口号查看进程

1:netstat  -ano|findstr  portid    OR     netstat -ano2:任务管理器 ->detail  PID

2017-04-18 18:04:35 315

转载 scheduler_tick函数

当每次时钟节拍到来时,即我们提到过的timer_interrupt会调用do_timer_interrupt_hook,从而调用do_timer和update_process_times函数,update_process_times则就是用来更新进程使用到的一些跟时间相关的字段,其罪重要的是调用scheduler_tick()更新时间片剩余节拍数:void scheduler_tick(voi

2017-04-14 17:11:41 515

转载 try_to_wake_up函数

try_to_wake_up函数通过把进程状态设置为TASK_RUNNING,并把该进程插入本地CPU运行队列rq来达到唤醒睡眠和停止的进程的目的。例如:调用该函数唤醒等待队列中的进程,或恢复执行等待信号的进程。该函数接受的参数有:- 被唤醒进程的描述符指针(p)- 可以被唤醒的进程状态掩码(state)- 一个标志(sync),用来禁止被唤醒的进程抢占本地CPU上正在运行的进程

2017-04-14 17:00:01 5047

转载 linux RTC 驱动模型分析

摘要: 最近学习RTC(real time clock)实时时钟,RTC实时时钟主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作“离线”的时间 与日期维护器。最近学习RTC(real time clock)实时时钟,RTC实时时钟主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把

2017-04-14 16:55:11 290

转载 Linux之时钟中断

在Linux的0号中断是一个定时器中断。在固定的时间间隔都发生一次中断,也是说每秒发生该中断的频率都是固定的。该频率是常量HZ,该值一般是在100 ~ 1000之间。该中断的作用是为了定时更新系统日期和时间,使系统时间不断地得到跳转。另外该中断的中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0,进程则被调度出

2017-04-14 16:33:13 15064 1

转载 C++的函数重载

写在前面:函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题1、声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了)2、当我们调用一个重载的函数时,又是如何去解析的?(即怎么知

2017-04-13 17:56:11 281

转载 task_struct结构描述

1. 进程状态(State)进程执行时,它会根据具体情况改变状态 。进程状态是调度和对换的依据。Linux中的进程主要有如下状态,如表4.1所示。 内核表示含义TASK_RUNNING可运行TASK_INTERRUPTIBLE可中断的等待状态

2017-04-13 17:48:47 452

转载 schedule-调度器

1.1.1 进程的基本知识 1. 调度类型  每个Linux进程总是按照下面的调度类型被调度:l SCHED_FIFO 这是先进先出的实时进程。当调度程序把CPU分配给进程的时候,它把该进程描述符保留在运行队列链表的当前位置。如果没有其它可运行的更高优先级实时进程,进程就继续使用CPU,想用多久就用多久,即使还有其他具有相同优先级的实时进程处于可运行状态。l SCHED_R

2017-04-13 17:46:42 1393

转载 内核栈

为什么需要内核栈进程在内核态运行时需要自己的堆栈信息, 因此linux内核为每个进程都提供了一个内核栈kernel stack,struct task_struct{ // ... void *stack; // 指向内核栈的指针 // ...};内核态的进程访问处于内核数据段的栈,这个栈不同于用户态的进程所用的栈。用户态进程所用

2017-04-13 17:37:30 3166

转载 Linux内核进程调度schedule深入理解

一.说明本文以linux-2.4.10 为例主要分析Linux 进程调度模块中的schedule 函数及其相关的函数。另外相关的前提知识也会说明。默认系统平台是自己的i386 架构的pc。二.前提知识在进行schedule 分析之前有必要简单说明一下系统启动过程,内存分配使用等。这样才能自然过渡到schedule 模块。首先是Linux各个功能模块之间的依赖关系:

2017-04-13 17:24:37 5310

转载 分析Linux内核创建一个新进程的过程

进程描述进程描述符(task_struct)用来描述进程的数据结构,可以理解为进程的属性。比如进程的状态、进程的标识(PID)等,都被封装在了进程描述符这个数据结构中,该数据结构被定义为task_struct进程控制块(PCB)是操作系统核心中一种数据结构,主要表示进程状态。进程状态fork()fork()在父、子进程各返回一

2017-04-13 17:16:23 315

转载 Linux中fork,vfork和clone详解(区别与联系)

fork,vfork,cloneUnix标准的复制进程的系统调用时fork(即分叉),但是Linux,BSD等操作系统并不止实现这一个,确切的说linux实现了三个,fork,vfork,clone(确切说vfork创造出来的是轻量级进程,也叫线程,是共享资源的进程)系统调用描述forkfork创造的子进程是父进程的完整副本,

2017-04-13 17:08:49 395

转载 linux常见进程与内核线程

发现大量jdb2进程占用io资源.jdb2进程是一个文件系统的写journal的进程kthreadd:这种内核线程只有一个,它的作用是管理调度其它的内核线程。它在内核初始化的时候被创建,会循环运行一个叫做kthreadd的函数,该函数的作用是运行kthread_create_list全局链表中维护的kthread。可以调用kthread_create创建一个kthread,它会被加入到kthr

2017-04-13 16:35:54 1625

转载 Linux下3个特殊的进程

Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2)* idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变为进程调度、交换* init进程由idle通过ker

2017-04-13 16:33:47 793

转载 LINUX内核线程

本文以ARM架构为例,讲解linux的内核线程是如何创建的。Linux内核在完成初始之后,会把控制权交给应用程序。只有当硬件中断、软中断、异常等发生时,CPU才会从用户空间切换到内核空间来执行相应的处理,完成后又回来用户空间。如果内核需要周期性地做一些事情(比如页面的换入换出,磁盘高速缓存的刷新等),又该怎么办呢?内核线程(内核进程)可以解决这个问题。内核线程(kernel

2017-04-13 16:19:53 291

转载 for(;;)和while(true)的区别

再看JDK源码的时候发现,“死循环”有两种写法:for(;;)和while(true),我就疑问,两者有啥区别,有啥源码中多数是for( ; ; )这种形式的,编译前              编译后     while (1);         mov eax,1                                                test eax,ea

2017-04-13 15:06:51 570

转载 &与&&运算的区别?

一、简要说明按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。例如: a&b 9&8 1001 1000结果是1000 a&&b 9&&8 结果是1&对每一个都判断;&&只要前面是false就输出false,而不继续判断后面了

2017-04-13 10:43:57 1567

转载 malloc()在操作系统中的实现

在大部分操作系统中,内存分配由以下两个简单的函数来处理:void *malloc (long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。void free(void *firstbyte):如果给定一个由先前的 malloc 返回的指针,那么该函数会将分配的空间归还给进程的“空闲空间”。malloc_init 将是初始化内存分配程序的函

2017-04-13 10:33:32 1080

转载 malloc与new的不同点

malloc与new的不同点  从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:     int *p;  p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);  或:  int* parr;  parr = new int [100];

2017-04-13 10:26:24 200

转载 malloc 与Free

一:malloc()实质malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的

2017-04-13 10:18:16 308

转载 标准库函数与运算符的区别

运算符是语言自身的特性,它有固定的语义,而且编译器也知道意味着什么。就像 +-*/ 一样,由编译器解释语义,生成相应的代码。 库函数是依赖于库的,没有库就没有它,也就是一定程度上独立于语言的。理论上,编译器不知道也不关心函数的作用,编译器只保证编译函数,以及调用该函数时参数和返回值符合语法,并生成相应 call 函数的代码。但实际中一些高级点的编译器,都会对标准库自带的一些函数进行特别处理。

2017-04-13 09:50:58 3465

转载 vma的基本操作

在Linux内核中,这样的区域被称之为虚拟内存区域(virtual memory areas),简称vma。一个vma就是一块连续的线性地址空间的抽象,它拥有自身的权限(可读,可写,可执行等等) ,每一个虚拟内存区域都由一个相关的struct vm_area_struct结构来描述struct vm_area_struct { struct mm_struct * vm_mm; /* 所

2017-04-12 15:29:33 5650

转载 linux内存管理浅析

[地址映射](图:左中)     Linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。     想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存放在内存里面的),才能完成映射。也就是说,要实现一次内存访问,实际上内存被访问

2017-04-12 14:36:36 602

转载 mm_struct

Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起。(所依据的代码是2.6.32.60)无论是内核线程还是用户进程,对于内核来说,无非都是 task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process descriptor),因为它记录了这个进程所有的context。其中有一个被称为'内存描述符‘(memory

2017-04-12 14:13:52 1743

转载 slab机制

1.内部碎片和外部碎片外部碎片什么是外部碎片呢?我们通过一个图来解释: 假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这样子,久而久之就形成了页框的浪费。称为外部碎片。内核中使用伙伴算法的迁移机制很好的解决了这种外部碎片。内部碎片当

2017-04-12 11:38:48 914

转载 内存管理-SLAB(SLAB的基本数据结构)

slab分配器基本原理:  slab最初是在Solaris 2.4中引入Linux操作系统的,用于解决内碎片问题。程序经常需要创建一些数据结构,比如进程描述符task_struct,内存描述符mm_struct等。slab分配器把这些需要分配的小块内存区作为对象,类似面向对象的思想。每一类对象分配一个cache,cache有一个或多个slab组成,slab由一个或多个物理页面组成。需要

2017-04-12 11:23:58 777

转载 双缓冲机制

最早解释多缓冲区如何工作的方式,是通过一个现实生活中的实例来解释的。在一个阳光明媚的日子,你想将水池里的水换掉,而又找不到水管的时候,你就只能用木桶来灌满水池。当木桶被水龙头注满的,关掉水龙头,走到水池旁边,将水到进去,然后走回到水龙头旁边继续重复上述工作,如此往复直到将水池灌满。这就类似单缓冲工作过程。当你想将木桶里的水倒出的时候,你必须关掉水龙头。现在假设你用两个木桶来做上面的工作。你会注

2017-04-11 15:46:48 10274 2

转载 FrameBuffer

FrameBuffer相关概念FrameBuffer中文译名为帧缓冲驱动,它是出现在2.2.xx内核中的一种驱动程序接口。Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。FrameBuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Frame

2017-04-11 15:42:27 1607

最小操作系统制作过程

这是一个不错的资源 帮助那些想学习 并且想自己写操作系统的人员

2014-10-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除