在开始编程之前,我寻求了解一些基础知识,我正在寻找有关计算机在核心级别如何工作的基本知识。
我有一个理论,实际上理解什么是 stackoverflow(更不用说堆栈了),而不是我对计算机系统的零星知识,这将帮助我更长期。
是否有任何书籍或网站可以引导您了解处理器的结构并提供整体概述,并且在某种程度上与数字逻辑的知识相关?
我说得有道理吗?
In my quest for getting some basics down before I start going into programming I am looking for essential knowledge about how the computer works down at the core level.
I have a theory that actually understanding what for instance a stackoverflow let alone a stack is, instead of my sporadic knowledge about computer systems, will help me longer term.
Is there any books or sites that take you through how processors are structured and give a holistic overview and that somehow relates to good to know about digital logic?
Am i making sense?
发布评论
评论(5)
的一些主题
是的,您应该阅读John L. Hennessy 和 John L. Hennessy 。 David A. Patterson,“计算机体系结构:定量方法”
它包含微处理器的历史和理论(从 RISC 架构 - MIPS 开始)、流水线、内存、存储等。David
Patterson 是 EECS 计算机科学教授部门 - 伯克利大学。 帮助
希望它有 ,这是链接
Yes, you should read some topics of
John L. Hennessy & David A. Patterson, "Computer Architecture: A quantitative Approach"
It has microprocessors' history and theory , (starting with RISC archs - MIPS), pipelining, memory, storage, etc.
David Patterson is a Professor of Computer of Computer Science on EECS Department - U. Berkeley. http://www.eecs.berkeley.edu/~pattrsn/
Hope it helps, here's the link
Tanenbaum 的结构化计算机组织是一本关于计算机如何工作的好书。您可能会发现很难读完这本书,但这主要是由于主题而不是作者。
但是,我不确定我是否会建议采用这种方法。了解计算机的工作原理当然很有用,但如果您确实没有任何编程知识,您就无法真正充分利用您的知识 - 而且您可能还不需要这些知识。您最好学习面向对象编程和数据结构等主题来学习程序设计,因为除非您考虑在非常有限的系统上进行嵌入式编程,否则您会发现这些技能比知识更有用。计算机的内部工作原理。
Tanenbaum's Structured Computer Organization is a good book about how computers work. You might find it hard to get through the book, but that's mostly due to the subject, not the author.
However, I'm not sure I would recommend taking this approach. Understanding how the computer works can certainly be useful, but if you don't really have any programming knowledge, you can't really put your knowledge to good use - and you probably don't need that knowledge yet anyway. You would be better off learning about topics like object-oriented programming and data structures to learn about program design, because unless you're looking at doing embedded programming on very limited systems, you'll find those skills far more useful than knowledge of a computer's inner workings.
在我看来,20 年前,我们可以理解从 BASIC 一直到操作系统、硬件,一直到晶体管甚至量子级别的整个范围。我不知道一个人是否有可能利用当今的技术来理解整个范围。 (几年前,每个人都保养自己的汽车。今天这太难了。)
您可能感兴趣的一些“层”:
In my opinion, 20 years ago it was possible to understand the whole spectrum from BASIC all the way through operating system, hardware, down to the transistor or even quantum level. I don't know that it's possible for one person to understand that whole spectrum with today's technology. (Years ago, everyone serviced their own car. Today it's too hard.)
Some of the "layers" that you might be interested in:
这实际上非常简单 - CPU 加载指令并执行它们,大多数指令都围绕将值加载到寄存器或内存位置,然后操作这些值。预留某些内存范围用于与连接到计算机的外围设备(例如屏幕或硬盘驱动器)进行通信。
回到 Apple ][ 和 Commodore 64 的时代,您可以将一个值直接放入内存位置,这将直接更改屏幕上的像素 - 那些日子已经一去不复返了,它被从您(程序员)中抽象出来多层代码,例如驱动程序和操作系统。
你可以学习这类东西,或者汇编语言(我是它的超级粉丝),或者硬件层面的 AND/NAND 门,但是了解这类东西并不能帮助你编写一个 Web 应用程序。 ASP.NET MVC,或者编写快速而肮脏的 Python 或 Powershell 脚本。
网上有很多资源,可以让您深入了解 CPU 和其他硬件的工作原理,但如果您想深入了解,我真的认为您应该从 eBay 上购买一台旧机器或者在某个地方,学习其特殊的汇编语言风格(我知道还有很多可编程 PIC 控制器也可能值得学习)。拿起一台旧机器将消除软件抽象并使事情变得更容易学习。当你获得即时满足时,你会学得更好,比如让精灵在屏幕上移动或通过直接切换扬声器(或使用 PIC 控制器控制小型机器人)来产生声音。对于那些较旧的机器,苹果][主板的原理图适合放在一张大约 A2 大小的纸上,折叠到一本苹果手册的背面 - 我不愿意想象它们现在是什么样子。
It's pretty simple really - the cpu loads instructions and executes them, most of those instructions revolve around loading values into registers or memory locations, and then manipulating those values. Certain memory ranges are set aside for communicating with the peripherals that are attached to the machine, such as the screen or hard drive.
Back in the days of Apple ][ and Commodore 64 you could put a value directly in to a memory location and that would directly change a pixel on the screen - those days are long gone, it is abstracted away from you (the programmer) by several layers of code, such as drivers and the operating system.
You can learn about this sort of stuff, or assembly language (which i am a huge fan of), or AND/NAND gates at the hardware level, but knowing this sort of stuff is not going to help you code up a web application in ASP.NET MVC, or write a quick and dirty Python or Powershell script.
There are lots of resources out there sprinkled around the net that will give you insight into how the CPU and the rest of the hardware works, but if you want to get down and dirty i honestly think you should buy one of those older machines off eBay or somewhere, and learn its particular flavour of assembly language (i understand there are also a lot of programmable PIC controllers out there that might also be good to learn on). Picking up an older machine is going to eliminate the software abstractions and make things way easier to learn. You learn way better when you get instant gratification, like making sprites move around a screen or generating sounds by directly toggling the speaker (or using a PIC controller to control a small robot). With those older machines, the schematics for an Apple ][ motherboard fit on to a roughly A2 size sheet of paper that was folded into the back of one of the Apple manuals - i would hate to imagine what they look like these days.
虽然我同意前面的答案,因为理解整个过程非常困难,但我们至少可以将其分为几类,从最低的(最接近电子)到最高的(最接近你实际看到的)。
最低
固态器件物理(晶体管的物理工作原理)
电路理论(晶体管如何组合以创建逻辑门)
数字逻辑(逻辑门如何组合在一起创建数字功能或数字结构,即多路复用器、全加器等)
硬件组织(数据路径如何在 CPU 中布局、冯·诺依曼机器的组件 -> 内存、处理器、算术逻辑单元、获取/解码/执行)
微指令(位级编程)
汇编(用字编程,但直接指定寄存器,即使是简单的东西也需要很长时间才能编程)
解释/编译语言(编译或解释为汇编语言的编程语言;操作系统可能是其中之一)
操作系统(进程调度、硬件接口、抽象较低层)
高级语言(这些出现两次;这取决于语言。Java 是在非常高的水平上完成的,但 C 直接进入汇编,C 编译器可能是用 C 编写的)
用户界面/应用程序/GUI(最后一步,使其看起来很漂亮)
您可以找到有关其中每一个的很多信息。我只是在数字逻辑方面有点专家。如果您想要从头开始了解有关数字逻辑的完整教程,请访问我网站的电气工程菜单:
affouslyevil.wordpress.com
我正在教授课程,并随时添加在线课程。
While I agree with the previous answers insofar as it is incredibly difficult to understand the entire process, we can at least break it down into categories, from lowest (closest to electrons) to highest (closest to what you actually see).
Lowest
Solid State Device Physics (How transistors work physically)
Circuit Theory (How transistors are combined to create logic gates)
Digital Logic (How logic gates are put together to create digital functions or digital structures i.e. multiplexers, full adders, etc.)
Hardware Organization (How the data path is laid out in the CPU, the components of a Von Neuman machine -> memory, processor, Arithmetic Logic Unit, fetch/decode/execute)
Microinstructions (Bit level programming)
Assembly (Programming with words, but directly specifying registers and takes forever to program even simple things)
Interpreted/Compiled Languages (Programming languages that get compiled or interpreted to assembly; the operating system may be in one of these)
Operating System (Process scheduling, hardware interfaces, abstracts lower levels)
Higher level languages (these kind of appear twice; it depends on the language. Java is done at a very high level, but C goes straight to assembly, and the C compiler is probably written in C)
User Interfaces/Applications/Gui (Last step, making it look pretty)
You can find out a lot about each of these. I'm only somewhat expert in the digital logic side of things. If you want a thorough tutorial on digital logic from the ground up, go to the electrical engineering menu of my website:
affablyevil.wordpress.com
I'm teaching the class, and adding online lessons as I go.