728x90

Study 383

24.01.30 퀴즈, CSAPP 9.8 - 9.9.3, 백준

퀴즈 꼬리 재귀 최적화라는 새로운 알고리즘을 들었다. 뭔가 CSAPP책에서 놓친 것이 있었나하고 아차 내가 읽었던것을 까먹었던가 빼놓고 읽었구나 라고 생각했다. 하지만 다행? 다행일까? 새로운 부분이 나온걸 보아하니 그런건 아니구라 라고 생각도 한번씩하고, 하지만 내가 지금까지 알았던걸로 충분히 유추해서 풀 수 있었던 것을 생각하면 아쉽기도 한것같다. 그리고 내 지식의 구멍을 좀 느낄 수 있었다. 제대로 공부했다면 퀴즈라고 많은 시간을 소모하는 게 아니라 간단하게 복습하는것으로 기억을 되살려 문제를 풀 것이라고 생각하면 아직은 많이 모자란 것 같다. 그럼 이제 다시 배우거나 애매하게 있었던 것 레쓰꼬! 1. 스택과 레지스터가 어떤 것인지 설명하고, 용도와 장점을 설명하세요. 스택(stack)은 프로시저 ..

24.01.29 CSAPP 9.6 - 9.7, 백준, 코어타임

CSAPP 9.6 주소의 번역 주소 번역은 N원소 가상주소 공간(Virtual Address Space : VAS)과 M - 원소 물리주소 공간(Physical Address Space : PAS)의 원소들 간의 매핑이다. MAP : VAS → PAS U Ø MAP(A) A’ : 가상 주소 A의 데이터가 PAS의 물리주소 A’에 존재한다면 Ø : 가상 주소 A의 데이터가 PAS의 물리메모리에 존재하지 않다면 CPU내에 있는 제어 레지스터인 페이지 테이블 베이스 레지스터(Page table base register : PTBR)는 현재 페이지테이블을 가리킨다. n 비트 가상주소는 두 개의 컴포넌트를 가진다. p비트 가상페이지 오프셋(virtual page offset : VPO)과 (n-p) 비트 가상페이..

24.01.28 CSAPP 9 - 9.5, 백준

CSAPP 9 가상메모리 한 시스템의 프로세스들은 CPU와 메인메모리를 다른 프로세스들과 공유한다. 메모리를 보다 효율적이고 더 적은 에러를 갖도록 관리하기 위해서 현대의 시스템은 가상메모리 VM이라고 알려진 메인메모리의 추상화를 제공한다. 가상메모리는 각 프로세스에 하나의 크고 통합된 사적 주소공간을 제공한다. 이것은 하드웨어 예외, 하드웨어 주소번역, 메인메모리, 디스크파일, 커널 소프트웨어들 사이의 상호작용이다. 가상메모리는 한 개의 깔끔한 매커니즘을 사용해 세 주요 기능을 제공한다. 메인메모리를 디스크에 저장 된 주소공간에 대한 캐시로 취급해서 메인메모리내 활성화 영역만 유지하고, 데이터를 디스크와 메모리간에 필요에 따라 전송하는 방법으로 메인 메모리를 효율적으로 사용한다. 각 프로세스에 통일된 ..

24.01.27 CSAPP, 백준

24.01.27 CSAPP, 백준 CSAPP 3장을 다 읽어버렸다. 물론 코어타임을 할 대 한 번씩 복습하고 코어타임을 진행하겠지만 이제는 어디를 읽어야 할까 고민이 된다. 정해진 건 아직 없우니꼬ㅏ…. 다음 배우는곳이 C언어와 malloc rb트리 구현이다 보니 malloc과 관련된 9장을 미리 경험하려고 생각했다. 뭐 다음에 읽을 곳이 아니라면 다시 그 곳을 읽으면 되는것이고, 읽으면 좋은거지 읽는다고 나쁜건 없으니까. 왜.. 재미있을까 CSAPP .. 3.11 부동소수점 코드 프로세서의 부동소수점 아키텍처의 여러가지 개념 부동소수점 값들이 저장되고 접근되는 방법, 이것은 대개 레지스터들의 일부 형태로 이뤄진다. 부동소수점 데이터로 연산하는 인스트럭션 함수들의 인자와 리턴값으로 부동소수점 값들을 전달..

24.01.26 CSAPP 3.10.3 - 3.10.5, LCS, Knapsack

CSAPP 3.10.3 범위를 벗어난 메모리 참조와 버퍼오버플로우 C에서 배열참조시 범위를 체크하지 않으며, 지역변수들이 스택에 보존용 레지스터들과 리턴주소 같은 상태 정보와 함께 스택에 저장된다. 이러한 조합 때문에 심각한 프로그램 에러가 발생할 수 있는데, 스택에 저장된 상태정보가 범위를 벗어난 배열의 원소에 대한 쓰기 작업에 의해 변경되는 것이다. 그러고 나서 프로그램이 레지스터값을 재 적재하거나 이렇게 변경된 상태정보를 사용해서 ret인스트럭션을 실행할 때, 심각한 결과를 초래한다. 일반적인 상태손실을 버퍼오버플로우라고 알려져있다. 일반적으로 gets나 저장공간을 오버플로우하게 되는 함수를 사용하는 것은 나쁜 프로그래밍 습관으로 평가한다. 자주 사용하는 strcpy,strcat,sprintf 같이..

24.01.25 시험,CSAPP 3.10.2 , Algorithm,코어타임

시험 문제를 풀 때 너무 조급해서 막 접근했던 것 같다. 다음에 풀 때는 조금만 더 생각해서 하는게 오히려 시간을 줄일 수 있을 것같다. BFS DFS 문제에 대해서 잘 생각해보자 1388 import sys from collections import deque n,m = map(int,sys.stdin.readline().split()) floor = [] for i in range(n): floor.append(list(map(str,sys.stdin.readline().rstrip()))) visited = [[False for i in range(m)] for i in range(n)] cnt = 0 def bfs(x,y): q = deque() q.append((x,y)) dx = [0, 0, ..

크래프톤 정글 - 2Week 24.01.19 - 24.01.24 부제 : 치타는 웃고있다.

2Week 24.01.19 - 24.01.24 회고 2주차가 다 끝나고 3주차가 바로 쉬지않고 시작됐다. 뭐랄까 난이도가 점점 올라가면서 쉴 틈 없이 몰아치는 기분. 크래프톤 정글보다 폭풍이라는 이름이 더 잘 어울릴 것 같다는 생각도 문득 문득 떠오른다. 하지만 많이 힘들었던 2주차 동안 정말 중요하다고 생각이 들었던 것이 동료학습에 관한 부분이 었다. 폭풍에서는 동료고 뭐고 다 날라가겠지만 정글에서 동료와 함께 라면 살아남을 수 있으니까 이름을 잘 짓긴 한 것 같다. 문제풀이에 적응되기 전에 계속 새로운 키워드가 나오고 그것에 또 적응하려니 많이 힘든 주간이었다. 하루 종일 문제와 답을 번갈아가며 보다가 하루가 끝나기도 하고, 그렇게 하루가 끝나면 내가 과연 오늘 무엇을 한 걸까? 잘했을까? 라며 자책..

24.01.24 CSAPP 3.9

CSAPP 3.9 이기종 (Heterogeneous) 자료구조 C는 서로 다른 유형의 객체를 연결해서 자료형을 만드는 두 가지 방법을 제공한다. Struct 키워드를 사용해서 선언하는 구조체는 다수의 객체를 하나의 단위로 연결한다. 키워드 union으로 선언하는 공용체는 하나의 객체를 여러개의 다른 자료형으로 참조 될 수 있도록 한다. 3.9.1 구조체 C struct 선언은 서로 다른 유형의 객체들을 하나의 객체로 묶어주는 자료구조를 생성한다. 하나의 구조체 내의 서로 다른 컴포넌트들은 이름을 이용해서 참조된다. 구조체의 구현은 구조체의 모든 컴포넌트들이 메모리의 연속된 영역에 저장되며, 구조체의 포인터가 첫번째 바이트의 주소라는 점에서 배열과 유사하다. 컴파일러는 각 필드의 바이트 오프셋을 가리키는 ..

24.01.23 CSAPP 3.8, 복습,2Week, Python

CSAPP 3.8 배열의 할당과 접근 C에서 배열을 스칼라 데이터를 보다 큰 자료형으로 연계 시키는 수단이다. 한가지 특이한 점은 배열 원소들에 대한 포인터를 만들고 이들 포인터간에 연산을 할 수 있다는 점이다. 이것은 기계어에서 주소 계산으로 번역된다. 3.8.1 기본원리 자료형 T와 정수형 상수 N T A[N]; 시작하는 위치를 xA라고 표시했을 때, 이 선언은 두 가지 효과를 갖는다. 이것은 L*N 바이트의 연속적인 공간을 메모리에 할당하며, 여기서 L(바이트의 단위)은 자료형 T의 크기를 나타낸다. 새로운 식별자 A를 통해서 배열이 시작하는 위치의 포인터로 사용한다. 이 포인터의 값은 xA다. 배열의 각 원소는 0에서 N-1 사이의 정수형 인덱스를 사용해서 접근 가능하다. 배열의 원소 i는 xA ..

24.01.22 CSAPP 3.6.5 - 3.7, 복습

CSAPP 3.6.5 조건부 분기를 조건 제어로 구현하기 C에서 조건부 수식과 문장을 기계어 코드로 번역하는 가장 일반적인 방법은 조건부 및 무조건 점프를 함께 사용하는 것이다.(일부 조건문은 제어의 이동보다 데이터 이동으로 구현 할 수 있다.) GOTO문을 사용하는 것은 코드를 해독하고 디버깅하기 어렵게 할 수 있기 때문에 일반적으로 나쁜 프로그래밍 스타일이다. 3.6.6 조건부 이동으로 조건부 분기 구현하기 조건부 동작을 구현하는 전형적인 방법은 조건이 만족되면 프로그램의 한 가지 실행경로를 따르고, 아닌 경우에는 다른 경로를 따라가도록 하는 제어의 조건부 전환을 통해 이루어진다. 이 방법은 간단하고 일반적이지만 최신 프로세서들에서는 매우 비효율적일 수 있다. 또 다른 전략은 데이터 조건부 전송을 이..

728x90