OS별 페이지 테이블 엔트리(PTE) 개수의 차이Page Table의 크기 : page단위로 할당되고 pintos에서는 page의 크기를 4KB로 하고 있기 때문에 4KB(2¹²Byte)다.Page Table Entry의 크기 : 포인터의 크기를 가지기 때문에 각 운영체제 별로 다르다.32bit OS에서의 포인터 크기 : 4byte(2²)64bit OS에서의 포인터 크기 : 8byte(2³)PTE에 들어갈 수 있는 PTE의 개수는 NPage Table의 크기를 Page Table Entry의 크기로 나눈 값N = sizeof(PT)/sizeof(PTE)따라서 OS별로 PT에 들어가는 PTE의 개수는 다음과 같다.32bit는 2¹²/2² = 1024개64bit는 2¹²/2³ = 512개데이터와 물리, 가상..
레지스터레지스터의 종류general registerindex registerpointer registerflag register segment registerGeneral RegisterEAX : Extend Accumulator Register산술 연산자 레지스터함수의 return값 지정EBX : Extend Base Register간접 번지지정에 사용산수/변수를 저장ECX : Extend Counter RegisterREP(반복 레지스터)에 얼마나 반복할 것인지 저장반복(Loop)에서 반복횟수 수행EDX : Extend Data RegisterEAX를 보조Index RegisterESI : Extend Source Index복사,비교를 할 경우 출발지 주소 저장EDI : Extend Dest..
Pintos project의 시작드디어 OS프로젝트을 시작하는 주차가 됐다. 이번 프로젝트를 진행하면서 이전의 다른 프로젝트들과는 확실히 다른 느낌을 받았다. 난이도는 물론 더 어려웠고, 함수의 진행을 따라가기만 했는데도 머리가 어지러웠다. 하지만 그런 난이도적인 차이보다 OS 프로젝트의 차별점으로 느껴진 것은 확실히 하드웨어와 더 가까운 거리에서 코딩을 한다는 것이었다.이전의 내가 알던 코딩은 함수내에서 함수를 호출하는 것으로 진행이 이루어졌지만, 이번 프로젝트에서는 그 뿐만 아니라 레지스터의 값을 변화시키는 방법으로 진행의 흐름을 바꾸는 내용이 포함되어있었다.그리고 그 레지스터 값을 직접적으로 다루는 코드는 프로젝트 내에 어셈블리어로 작성되어 있었고, 그 코드를 이해하는 것이 다른 프로젝트와 가장 큰..
Dynamic Programming 왜 만듬? Brute Force, DFS, BFS을 이용해서 많은 경우의 수를 전부 따져보는데 시간이 너무 많이 걸리는 경우 즉, 다 따져보기에는 경우의 수가 너무 많아 속도가 느려지는 경우 수행시간을 단축하고자 만들어졌다. 다르게 보자면 큰 문제를 작거나 간단한 여러개의 문제로 나눠서 푸는 방법 작은 부분을 해결한 후 , 그 해들을 이용해서 큰 문제들을 해결, 최종적으로 원래 주어진 입력의 문제를해결하는 알고리즘 설계 기법 분할정복과 차이점 동적 분할 부분 문제가 중복되어 상위 문제 해결시 재활용됨 memoization 기법 사용 분할정복 부분 문제 중복 안됨 memoization 사용 안함 메모이제이션의 개념 Overlapping Subproblems( 중복 부분 ..
일단 정리해 놓은 부분만 올리자... Stack(스택) LIFO(후입선출)인건 알겠는데 그 특성이 어디에 좋은 건가? 잠시 하던 일을 멈추고, 다른 볼일을 보고 돌아올 때 좋다. 예를 들어 게임을 일시 정지하고 심부름을 가야한다고 생각해보자 게임을 하고 있는 초기 스택은 [ 게임 ] 이런 상태다. 심부름 명령이 들어오면 stack의 상태는 [ 게임 , 심부름 ] 가 된다. 심부름을 완료했다면 stack은 pop되어 다시 [ 게임 ]가 된다. 재귀함수 호출을 관리할 때의 경우도 위와 같은 방식으로 생각하면 편하다. 데이터의 역순 처리가 필요한 경우 백준 문제풀이에서 짝을 맞추는 상황에서 굉장히 유용하다. 어떤 알고리즘에서 주로 사용되나? DFS 재귀 또는 스택을 사용해 구현한다. 재귀함수가 스택이라 생각하..
너무 빡세기도, 아쉽기도, 재밌기도 했던 0주차가 끝나고 또다시 과제가 나왔다. 좀 신선한 이번 과제는 에세이 작성이다. 주제는 지나온 과거와 앞으로 정글 생활에 대한 자신에 생각이며 이제 써보도록 하자 지금까지의 나 제대로 나를 찾는 과정을 시작한 건 그리 오래되지 않았다. 내가 하고 싶은 것, 좋아하는 것을 찾기 시작한 건 아마 재작년 정도부터였다. 그전까지 떠내려가는 나뭇잎처럼 자신의 주관 없이 수동적으로 살아왔다. 머릿속에는 물음표보다는 마침표가 압도적으로 많았다. 다른 사람의 생각, 의견들을 들으면 "왜 그렇게 생각하지?" 보다는 "음 그렇구나." 하면서 여과 없이 받아들이고 따라가는 식이었다. 물론 행복한 순간도, 재밌는 순간도 있었으며, 좋은 사람들이 없었다는 것도 아니다. 다만 나 자신을 ..
c언어의 컴파일 과정에 대해 Run 버튼만 누르면 알아서 해줘서 딱히 생각이 없다가 강의를 들으면서, "원리도 모르고 쓰고 있었네?" 라는 생각이 씨게 와서 글로 남기게 됐다. 과정 0. 시작 파일 : hello.c 1. 전처리 : hello.i 수행은 전처리기가 한다. gcc(gnu compiler collection)을 이용해서 확인 가능하다. 명령어 : gcc -E hello.c -o hello.i 보통 컴파일이 책을 통으로 번역하는 작업이라 한다. 그런 관점에서 전처리는 책을 번역하기 전에 책에서 인용한 참조 문서들을 가져오는 작업이라고 할 수 있겠다. 가져오기만 하고 번역은 하기 전이다. 즉, 전처리의 결과는 아직 소스코드인 상태다. 수행 작업 파일을 읽고 외부에 선언된 다양한 소스코드,라이브러..
먼저 파일이란? 컴퓨터가 저장하고 있는 데이터라고 할 수 있다. 소켓도 파일이라고 볼 수 있다. 그리고 프로토콜이란? 정보처리기사 내용 구문, 의미, 타이밍으로 구성 데이터를 안전하게 주고 받기 위한 약속 구문 : 패킷의 데이터 구조를 어떤 구조로 만들지 약속하는 것, 프로토콜마다 다른 구조를 가지고 있다. (소켓을 이해하는데 이 부분만 있으면 될 것 같다.) 그럼 패킷은 또 뭔가 바로 소켓이라는 파일에 적히는 데이터의 형태, 즉 소켓에 담기는 데이터가 되겠다. 소켓의 형태는 위에서 설명한 프로토콜의 종류에 따라 정해진다. 마침내 소켓이란? 패킷을 담는 파일이자, 통신에 사용되는 파일, 통신에 필요한 데이터를 담는 파일 되시겠다. 서로 다른 두 컴퓨터가 있다고 가정해보자 그들은 각자 고유의 ip를 가지고..