CS쪽 관련 서적에대한 질문인데요..

quodvide의 이미지

대학교에 입학하고 지금까지 다섯학기를 다녔습니다.
저는 제 전공을 좋아하지만 아직 모르는게 많아서 가끔 답답하여 질문하는데요
입학하고 C언어배우고. C++배우고. 다시 군대갔다와서 흐지부지되고
컴퓨터구조, 어셈블리언어, 자료구조, 컴퓨터통신, 운영체제, DB 등등을 배웠습니다.
뭐 군대 갔다와선 나름 열심히하고 나름 다 이해도 잘 했는데 뭔가 아직 CS에대한 감이 잡히지 않는다고 해야하나요..

저는 컴퓨터라는 것에 관련된 전체적인 지식을 알고싶은데요
거창하게 전부 세세하게 알겠다! 가 아니라 예를들어 컴퓨터 통신이라면 통신에 대하여만 자세히 배우고 어셈블리언어는 기계어에 대해서 깊게 들어가고 이런거라면
저는 컴퓨터라는 것에 관련된 전기적인 낮은수준부터 C, 웹프로그래밍, 컴퓨터통신등 전체에 대해서 알고싶어요.
자세히 말고 이런것들이 어떻게 묶여서 어떤식으로 돌아간다 이렇게 훑고 가는정도??

친구가 보안쪽에 가려면 이런 컴퓨터에 대한 전반적인 모든 지식을 어느정도 알고있어야 된다고 하였는데
아직 보안쪽으로 가려는건 아니지만 생각해보니 제가 모르는게 너무 많은것같아요.
이런 저에게 도움이 될만한 서적을 아시면 하나씩 던저주시면 찾아보겠습니다

한글이면 좋겠지만 영어라도 부담스럽지 않은 두께의 책이라면 상관없습니다!

익명 사용자의 이미지

컴퓨터의 본질은 CPU 입니다.

극도로 추상화해서 보았을 때,
컴퓨터는 그저 CPU와 Register, Memory(ROM, RAM)만 가지고 연산할 뿐이고,
간간이 외부 장치(Hard Drive, Graphic Card, Sound Card, USB Device, Network, ...)와 통신해서 정보를 가져오거나 보내줄 뿐입니다.

예를 들어 우리가 C 프로그램에서 printf("Hello World!"); 를 했을 때 이 Hello World! 라는 글자가 찍히는 과정은,
운영체제에 할당된 콘솔 메모리에 Hello World!라는 글자가 아스키 코드로 저장되어 있고, 이것을 운영체제가 빠른 시간 안에 그래픽 카드와 통신하기 위한 RAM 영역에 그래픽 데이터(픽셀)로 변환해 복사해 줍니다.
그러면 그래픽 카드는 정해진 주기(예: 60Hz)로 정해진 RAM 영역을 읽어 모니터와 연결된 케이블을 통해 전기적 신호로 픽셀 값을 모니터에게 전송해 주면, 모니터는 그걸 광학적 원리에 의해 눈으로 볼 수 있는 빛으로 만들어 줄 뿐입니다.
컴퓨터의 범위를 어디까지 잡느냐에 따라 다르지만, 일반적인 관점에서 볼 때 컴퓨터의 핵심은 [컴퓨터 구조론]과 그것을 운용하는 방법론을 다루는 [운영체제]입니다.

저런 지식을 거창하게 책으로 다루는 책은 제가 알기로는 없고, 지식을 습득하실 때 스스로 깨우치셔야 하는 부분입니다.
이게 내 눈으로 보이기 까진 어떤 과정을 거쳤을까 - 라는 궁금증과 나름대로의 상상, 그리고 학습에 의한 교정 과정을 끊임없이 거치면서요.

===

http://cafe.daum.net/codeinside

HDNua의 이미지

1.
>> 저는 컴퓨터라는 것에 관련된 전체적인 지식을 알고싶은데요
>> 거창하게 전부 세세하게 알겠다! 가 아니라 예를들어 컴퓨터 통신이라면 통신에 대하여만 자세히 배우고 어셈블리언어는 기계어에 대해서 깊게 들어가고 이런거라면
>> 저는 컴퓨터라는 것에 관련된 전기적인 낮은수준부터 C, 웹프로그래밍, 컴퓨터통신등 전체에 대해서 알고싶어요.
>> 자세히 말고 이런것들이 어떻게 묶여서 어떤식으로 돌아간다 이렇게 훑고 가는정도??

다른 것은 배우지 않았습니다. 하지만 컴퓨터에 관해 전기적인 수준으로 접근하시려면, CS가 아니라 Engineering을 공부하셔야 합니다.
Computer Science는 자료구조나 알고리즘과 같이, 어떤 추상적인 문제를 해결하기 위한 효과적인 방법론을 배우는 쪽이라면,
Electronic Engineering은 디지털논리회로로 Flip-Flop과 Logic gate, 전자회로 이론으로 반도체, 트랜지스터 등을 배워서 Hardware를 설계하는 것을 배우는 쪽이지요.

2.
Digital Design and Computer Architecture (David Harris & Sarah Harris)를 참조하면, 현대의 트랜지스터는 MOSFET(금속 산화 실리콘 전계 효과 트랜지스터)이라는 녀석을 이용합니다.
(요즘에는 FinFET이라는 새로운 기술이 더 각광받는 모양이더군요. PinFET인가?)
트랜지스터는 n형 트랜지스터와 p형 트랜지스터로 나뉘는데, n형은 0을 잘 통과시키지만 1은 잘 통과시키지 못하고 p형은 1은 잘 통과시키지만 0은 잘 통과 못 시킵니다.
하지만 이 두 녀석을 적절히 조합하면 NOT이라는 비트 부정 gate를 만들 수가 있어요. 0과 1을 표현할 수 있게 된 겁니다.

여기까지가 학부생 수준에서 컴퓨터공학을 이해하기 위해 필요한 전자회로라면,
그 다음부터는 디지털논리회로고, 그 다음부터는 Hardware 설계를 위한 Verilog 또는 어셈블리같은 Low-Level Language랑 놉니다.
이 정도로만 이해하고 있다면 굳이 저 모든 분야를 다 미리 알고 있지 않더라도, 나중에 필요에 의해 그것을 사용해야 할 때 크게 문제는 되지 않습니다.
(아니면 단순히 배움이 짧아서 그런 걸까요?)

3.
결론은 저런 것을 전체적으로 다루는 책은 없을 거라는 것입니다.
전자가 어떤 식으로 도는가에 관심이 있으시면, 일단은 디지털 논리 회로 책으로 시작하시는 것이 적절하리라 봅니다.

PS.
저도 이제 3학년 올라가는 학부생이라 되도 않는 소리를 막 써놓았을 거라고 생각해요. 고수 분들의 지적 "정말로" 환영합니다. :)

저는 이렇게 생각했습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.