coroutine과 어셈블리어 학습

eonil의 이미지

안녕하세요. 방금 가입한 에오닐입니다.
사이트 주제에서 벗어날지도 모르겠으나, 국내에서는 고수들이 모여있는 사이트여서 도움을 구하고자 합니다.

제가 Mac OS X에서 C로 코루틴 작성을 시도했는데, ucontext.h 가 지원되지 않아서 상당히 고생을 하던 중, 코루틴이란 놈이 C의 추상화 수준을 벗어난다는 느낌을 받았습니다. (실제로 그렇다는 주장을 하는 게 아닙니다. 단순히 제 느낌입니다.)

이를 제대로 제대로 이해하고 사용하려면 더 하부인 기계/어셈블리 수준에서의 이해가 필수적일 것 같더군요.
제가 전산전공이 아니라 C보다 하부인 어셈블리나 CPU는 거의 모릅니다. 그런데 여기저기서 자료를 구하다보니 Program Counter, Register 등의 용어가 마구 튀어나오는데, C 함수가 호출되고, 프로그램 흐름이 전달되는 방식에 대해서 원형에 대한 이해가 필수적이더군요. 대략적인 개념만 알지 실제로 완벽하게 이해하지는 못하는 것들이라 제대로 공부해야겠다는 생각이 들었습니다.

하드웨어에서의 프로그램은 어떻게 작동하는지, C 프로그램이 어떤 식으로 어셈블리로 바뀌고, 또 이 프로그램이 어떻게 작동되는지에 대해 공부하고자 하는데, 어디서부터 시작해야 할지 막막하네요. 원래는 코루틴의 동작방식과 실제 구현을 이해하는 것이 목표이지만, 필요하다면 당연히 더 하부의 기반 지식도 익혀야 한다고 생각합니다.

어떤 길을 가면 좋을지 가이드를 부탁합니다.

Necromancer의 이미지

C 함수 호출할때는 스택을 이용합니다. argument 데이터와 반환주소가 스택에 들어간 다음 공통루틴으로 점프하고, 다시 스택에 저장된 반환주소 정보를 이용해서 원래 실행했던 곳으로 돌아오는 식으로 동작합니다.
근데 이 스택이 어떻게 관리되는지는 기계마다, 같은기계라도 운영체제마다 다릅니다.
x86은 하드웨어에서 어느정도 지원은 해줍니다. 스택 관리를 위한 레지스터 및 전용명령이 CPU에 있습니다.
근데 스택은 어셈블리 입문강좌라 할찌라도 중간 or 마지막에 가서 배울겁니다. 그전에 알아야 할것들이 그만큼 많다는거죠.

Written By the Black Knight of Destruction

yae1021의 이미지

컴퓨터 구조론에 대한 책을 조금이라도 보시는게 좋으실듯 싶습니다.
원하시는 레지스터니 pc니 하는 cpu의 내부 구조나 어셈블리어, 기계어의 실제적인 구현과 동작등과 같은 이야기를 총체적으로 다루는 쪽이 컴퓨터 구조 쪽이거든요.

아니면 찰스(charles petzold)씨가 쓴 code 라는 책이 있습니다. 아주 가볍진 않은데 한번 읽어볼만한 비교적 가벼운 개론서 정도로 쓰실수 있을듯 싶습니다.

나빌레라 님이셧나? 그분도 이곳 greek blog쪽에 구조론쪽 이야기를 대략적으로 쓰셧던것 같은데...
http://kldp.org/node/114667
찾아보니 있네요.
자세히는 아니여도 대략적으로 cpu가 어떤 물건인지, 어떤식으로 작동되고 그게 어떻게 기계어라는 언어가 되는지 정도는 간단하게나마 도움이 될듯 싶습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.