일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 어뎁티브 해시 인덱스
- 도커
- 밑바닥부터 만드는 컴퓨팅 시스템
- 구문 분석
- 온라인 ddl
- 컴퓨터 아키텍쳐
- 메모리 세그먼트
- 운용 시 유용한 쿼리
- 필수 스크립트
- innodb구조
- 마운트
- mysql 엔진
- performance스키마
- dff
- 밑바닥부터 만드는 운영체제
- innodb 버퍼풀
- MySQL
- nandtotetris
- Terraform
- 밑바닥부터 구현하는 컴퓨팅 시스템
- InnoDB
- jack 문법
- 안전하게 테이블 변경
- ec2
- 스택머신
- 핵기계어
- vm머신
- s3
- 리눅스
- vm번역기
- Today
- Total
목록전체 글 (91)
이것이 점프 투 공작소

이 책의 마지막 장인 운영체제입니다.OS는 컴퓨터에서 실행되는 모든 프로그램을 지원해야하기에 효율이 매우 좋아야합니다.OS의 시간 및 공간 효율성이 높을수록 응용프로그램의 성능 또한 올라갑니다.운영체제는 보통 고수준언어로 작성되어 바이너리 형식으로 컴파일됩니다.let n = Keyboard.readInt("Enter a number : ") 위와 같은 명령어가 실행되면, 프롬프트에 Enter a number: 라는 문자열이 표시됩니다.그러려면 String 객체가 생성되고 각 글자를 char 값 배열로 초기화합니다.이후 문자열을 스크린에 한 번에 하나씩 렌더링하며, 다음 문자가 물리적으로 표시되어야하는 커서 위치를 업데이트합니다.또한 사용자가 키보드의 특정키를 누를때까지 기다리는 루프 또한 준비되어야하고 ..

컴파일러고수준 프로그램을 vm코드로 변경해주는 일종의 번역기입니다.고수준 언어는 객체와 배열등 다양한 추상적 개념들이 있지만 컴파일러의 vm코드에서는 스택과 가상 세그먼트만 사용 가능합니다.잭 컴파일러는 jack 코드를 vm 코드로 변환합니다. 각각의 파일들은 각각의 vm코드로 변환되며 (filename.jack -> fileName.vm)서브루틴(생성자, 메서드 등)들은 fileName.subName으로 변환됩니다. 앞장에서 다뤘던 요소 Tokenizer를 포함하여 총 5개의 모듈이 만들어져야 합니다. 1. JackCompiler입력된 jack 파일을 vm파일로 변환하는 핵심 모듈 , JackToknizer를 호출해여 입력을 전달하고 vm파일을 반환합니다.이후 SymbolTable, VMWriter를 ..

컴파일 과정은 크게 둘로 나뉩니다.먼저 프로그램의 구문(syntax)를 이해하고, 그 구문을 통해 프로그램의 의미(semantics)를 찾습니다.예를 들어 프로그램 코드를 분석(parsing)해서 배열을 선언하거나 객체를 조작하려고 한다는 사실을 파악했다고 하면,그 언어의 구문을 이용해 코드를 다시 표현 할 수 있습니다. 이를 구문 분석(syntac analysis)라고 부릅니다.구문 분석기는 tokenizer와 parser로 나뉩니다.두번째 과정인 코드 생성(code generation)은 다음장에서 다룹니다. 핵 플랫폼에서는 구문 분석기가 소스코드의 구문 구조를 반영하는 xml 마크업 파일을 출력하도록 하는 것 입니다.구문 분석기에서 만든 xml 파일을 code generator가 사용합니다.Toke..

이제는 핵 플랫폼의 고수준 언어 Jack이 드디어 나타났습니다.기본적으로 java, c++같은 객체기반 언어라고 합니다.상속은 지원하지 않지만, 여러가지 응용프로그램을 만들수 있다고합니다. 잭은 여기 플랫폼에서만 사용되는 언어이기에 잭을 학습한다기 보다는'컴파일러와 os를 개발할 때 지지대 역할을 하는 언어'정도로만 생각하고 학습하려합니다.Hello World컴파일된 잭 프로그램이 실행될 때는 항상 Main.main함수에서 실행됩니다.잭은 표준 클래스 라이브러기가 존재하며 이를 잭 OS라이브러리라고 합니다.절차적 프로그래밍과 배열 처리변수 할당 및 반복을 처리하는 전형적인 명령문들입니다.keyboard와 Output은 os라이브러리의 클래스입니다.잭에서 Array객체는 타입과 상관없이 모든 값들을 저장 ..

런타임 시스템모든 컴퓨터 시스템은 런타임 시스템 모델을 정의해야합니다.프로그램 실행을 시작하는 방법, 프로그램 종료시 수행해야하는 작업,한 함수에서 다른 함수로 인수를 전달하는 방법, 실행 중인 함수에 메모리 리소스를 할당하는 방법, 더 이상 필요없는 메모리를 해제하는 방법 등, 모든 필수적인 질문들에 대한 정의가 필요합니다. 핵 플랫폼에서는 이 문제들을 HACK 플랫폼의 표준 맵핑과 함께 VM 언어 명세로 다룹니다.명세에 따라 vm 번역기를 개발하면 최종적으로 실행 가능한 런타임을 구현 할 수 있습니다.특히 vm 번역기는 vm명령 (push, pop, add)등을 어셈블리 명령어로 번역할 뿐 아니라, 위에서 언급한 모든 질문들에 대한 대답을 어셈블리어로 만들 수 있습니다.고수준 마법위와 같은 수식은 고..

가상 머신 패러다임프로그램들은 컴퓨터에서 실행되려면 기계어로 번역되어야 합니다.많은 고수준 언어들이 생겨남에따라, 동일하게 컴파일러들도 생겨났고 이러한 컴파일러들은 원본언어에 종속적이게 되었습니다. 현대에는 이 종속성을 분리하기 위해 전체 컴파일 과정을 두 단계로 나누었습니다.첫 단계는 고수준 언어의 구문을 분석(parse)하여 그 명령들을 중간처리단계로 번역합니다. (컴파일러)두 번째 단계에서는 이 중간 단계를 다시 대상 하드웨어의 기계어로 번역합니다. (VM번역기) 두 단계(컴파일러, vm번역기)를 이어주는 인터페이스를 가상 머신 (virtual machine)이라고 합니다. 고수준 언어가 기계어로 번역되는 과정컴파일러가 고수준 코드를 중간 VM 명령으로 번역vm 변역기가 중간 vm 명령을 기계 ..
해당 장 과제인 어셈블러 구현은고수준 프로그래밍 언어로 구현하기에 포스팅에서 생략합니다!어셈블러모든 컴퓨터에는 명령어가 0과 1의 연속으로 작성되는 이진 기계어와 인간이 이해하기 쉬운 표현을 사용하여 명령어를 표현하는 어셈블리 언어가 있습니다. 두 언어 모두 정확히 동일한 작업을 수행하며 완전히 동등합니다. 하지만 어셈블리로 프로그램을 작성하는 것이 바이너리로 작성하는 것보다 훨씬 쉽고 안전합니다. 이러한 이점을 누리기 위해서는 누군가 심볼릭 프로그램을 컴퓨터에서 그대로 실행할 수 있는 바이너리 코드로 번역해 주어야 합니다. 이 번역 서비스를 어셈블러가 수행합니다. 어셈블리어는 2진 코드와 직접 대응되므로, 어셈블러를 구현하는 일은 그렇게 어렵지 않습니다.다만 어셈블리 프로그램에서 메모리 주소를 기호로 ..

폰 노이만 구조튜링기계는 간단한 추장석 컴퓨터 모델로, 주로 이론 컴퓨터 과학에서 계산의 논리적 기초를 분석하는 데 활용됩니다.반면 폰 노이만 기계는 모든 현태 컴퓨터 플랫폼을 구성하는 실제 모델로서 폰 노이만 구조는 메모리 장치와 통신하고, 입력 장치에서 데이터를 받고, 출력 장치로 데이터를 내보내는 중앙 처리 장치(CPU)를 바탕으로 합니다.컴퓨터가 조작하는 데이터 외에 컴퓨터가 수행할 작업을 지시하는 명령어도 메모리에 저장된다는 개념입니다.메모리메모리는 물리적관점과 논리적관점에서 바라 볼 수 있습니다. 물리적으로는 주소를 지정 할 수 있는 고정된 크기의 레지스터들을 선형적으로 배열한 것 이며, 레지스터들은 각각의 값을 가집니다.논리적으로는 데이터 저장과 명령어 저장이라는 두가지 용도로 사용됩니다.명..

기계어하드웨어(기계)를 제어하는 언어이며, 하드웨어와 소프트웨어 사이 가장 중요한 인터페이스입니다.CPU가 명령을 처리 할 때 사용되는 언어로 2진수로 되어있습니다. 모든 기계어는 기본적인 산술연산과, And, Or, Not같은 논리연산들을 위한 명령어들을 지원합니다.기계어에서 수행되는 많은 작업들은 특정메모리에 접근하여 메모리를 조작하는 것과 관련이 있습니다. 아래 예시는 완전한 기계어(2진수)가 아니라 어셈블리어 입니다.어셈블리어는 어셈블러에 의해 기계어로 변경되어 하드웨어에 전달됩니다. CPU는 메모리에 올라가있는 명령들을 순서대로 실행하지만,특정 명령어로 점프하거나, 반복해야하는 경우도 있습니다.이러한 분기동작을 위한 기능도 존재합니다. (R1, R2는 레지스터를 의미합니다.)핵 기계어책에서 다루..

이전까지 만들었던 칩들은 시간과 무관한 조합(combination)칩입니다.여기서 실습할 칩들은 현재시점의 입력과 이전에 처리되었던 칩들의 결과에도 영향을 받는 순차(sequential)칩 입니다.컴퓨터에서의 시간은 클럭(tick, tock)이라는 2개의 이산신호를 이용해서 구현 할 수 있습니다. 데이터 플립 플롯 (DFF)컴퓨터에서의 시간 클럭(tick, tock)을 사용하는 논리게이트입니다.DFF는 클럭 신호에 맞추어 데이터를 출력하며, 이전에 입력되었던 신호를 출력하는 간단한 동작을 구현합니다.(클럭 신호는 클록 전용 버스를 통해 DDL로 전달됩니다.) 예를들어 DFF의 in에 1이 들어간다면 DFF는 in으로 들어온 데이터 1이 저장되고다음 클럭 때 DFF에서 가지고 있던 데이터 1을 출력합니다...