威盛笔试1





发信人: fenga (It's A GooD DaY...To DiE), 信区: Job

标 题: Re: ★★★VIA面试归来,奉献面经给大家★★★

发信站: 武汉白云黄鹤站 (2003年11月12日23:27:05 星期三), 站内信件



1. PCI总线的架构,机器boot起来的时候CPU如何检测新插入的PCI设备?

对X86来说,BioS会提供一些调用检测设备,Linux kernel引导的时候可以不用这

些bios调用而自己扫描各级pci bus,主要会读取PCI configuration register(Device

ID, Vendor ID, PCI base/local base range)等

2. 谈谈x86的系统架构

x86:

MMU: 2 level page table or 3 level page table for IA-64

Interrupt controller: 8259, APIC for SMP arch, IDT

北桥:完成Local bus --> PCI bus, 还有memory controller,AGP extension

南桥:PCI bus --> other(ISA..etc), 好像interrupt controller也通过南桥接



Cache: 冯罗伊曼体系结构, I/D cache

pipeline: 我说不上来有什么特别的地方?

3. x86系统中的汇编有哪几个寄存器,分别是干什么用的?

general purpose register: ax, bx, cx, dx

segment register: Code segment/CS,Data segment/DS,Stack Segment/SS, ??/F

S, 高13位作为segment selector, 还有一位表示用于LDT还是GDT,剩下两位是privile

ge level


GDTR: GDT base

IDTR: IDT base

TR: TSS base

CR0~CRx: CR3 好像是page table base, CR0 里面可以打开MMU

EFLAGS: Indicates overflow/negtive/zero/...

只记得这些了,其实可以去看手册啊

4. 函数入栈出栈在汇编里面是如何实现的?

push/pop, ESP 减小--〉进栈, ESP增大-->出栈

?指函数参数进栈出栈嘛? 是由Compiler完成的 ,STDCALL时首先返回地址的CS,

EIP进栈,然后参数从右至左依次进栈

可能会产生page fault exception而造成堆栈的扩展,x86堆栈由高地址往低地址

延伸

5. Linux系统中线程和进程有什么区别?系统是如何实现进程和线程的管理的?

Linux线程可能有两种情况:内核线程/用户态线程,根本的区别是没有独享的用户空



用户态线程只是轻量级进程,仍然作为一个调度单位,即有自己的task_struct结构,

使用POSIX库来创建/管理调度,

进程直接由内核scheduler进行调度

6. Linux线程是抢占式还是非抢占式的?

目前是非抢占式的,但2.6推出后不一样了

为了避免内核中的不可重入的资源被破坏,调度函数schedule()只能在返回用户空间

的时候才能被调用,导致了内核不可抢占,2.6使用了Robert Love的一个patch,可以在


某些情况下抢占内核,即当前进程不处于某个临界区之内

7. 在debug的时候,假如有这样一段语句:

if(...)

{

a...

} else {

b...

}

如果程序已经执

行到a处,此时改变那个寄存器可以让程序跳转到b处执行?

EIP?

8. Softice如何加入一个中断?

很多种方式 bpx?

9. 中断是如何实现的?debug时设置了断点,CPU如何知道?

x86不是太清楚,好像是EFLAGS里面可以标示目前处于DEBUG mode

对其他体系结构来说,如PPC, ARM,它们都有相应的Exception Vector对应于调试需

要, 然后有一些针对调试而设计的寄存器存放access哪些instruction address or dat

a address 要break下来,break 后进入exception vector处理函数,所谓的插桩式(st

ub),一些调试软件如kgdb就是这种方式,JTAG/BDM ICE好像不一样,它们是利用了芯片

本身支持的一些调试功能

10. Linux编程中,用户空间的进程如何访问内核空间的函数?

如果当前CPU没有MMU/内存保护,可直接访问,呵呵

对x86来说需要经过privilege level 切换由3--〉0, 包括stack,page table(U


ser process related,Kernel page table不变) 也要变

11. 请你说说汇编里面是如何实现函数的出栈入栈操作的?

上面回答了

12. 用过windebugger没有?了解2D/3D编程么?了解video方面的编程么?

win debugger--> softice? 不了解,不了解,呵呵

如果还有想起来的,我后面再贴吧。



【 在 netjerry (找工作了,加油干!) 的大作中提到: 】

: 昨天晚上去了VIA的宣讲会,本来投的是Software Engineer(2)的(主要是Linux

:

: 下的开发),结果只有Software Engineer(1)的职位了,没办法就投了一个,打算

:

: 去做做笔试题。回来没多久收到VIA的笔试通知,让今天早上10:00去参加笔试(

:

: 晕,今天又不去实验室,怕怕,不过也没办法,机会难得)。

:

: 早上的笔试整体感觉来说还好,除开最后一个题目(是让你写一个函数,删除

:

: .................(以下省略)



--

| |




相关主题
相关文档
最新文档