목록전체 글 (89)
학사 나부랭이
암호 키가 있어야 정상적으로 해독 가능 보안을 위해 변환 평문-(암호화)->암호문-(복호화)->평문 단, 해시값은 복호화 불가 코드 변환 규칙을 공개해서 누구나 해독 가능 편의를 위해 변환 평문-(인코딩)->코드-(디코딩)->평문 들어가기 전에 가벼운 파이썬 리스트 배열인데 자료형을 따지지 않음 (ex. li = [1, 2.4, 'a', 'asdf', ['가', 0, 3.1]]) 리스트 객체의 append()로 원소 추가 (ex. li.append(4) == [1, 2.4, 'a', 'asdf', ['가', 0, 3.1], 4]) 리스트 객체의 remove()나 del 키워드로 원소 삭제 (ex. li.remove('asdf') or del li[3] == [1, 2.4, 'a', ['가', 0, 3.1..
메모리의 주소는 크게 두 가지로 나눌 수 있는데 먼저 Logical address(virtual address)는 프로세스마다 독립적으로 가지는 주소 공간이라서 각 프로세스마다 0번지부터 시작해요. CPU가 참조하는 주소이죠. 그리고 Physical address는 메인 메모리에 실제로 올라가는 위치죠. 이런 프로세스들이 실제로 할당받을 물리 주소는 address binding으로 결정되어요. 주소 바인딩에는 몇 가지 종류가 있어요. Compile time binding 컴파일할 때 물리 주소가 결정되는 주소 바인딩이에요. 프로그램의 물리 주소를 바꾸고 싶으면 다시 컴파일해야 하죠. Load time binding 프로그램의 실행이 시작될 때 물리 주소가 결정되어요. 로더가 메모리 주소를 부여하고 프로그..
0. Pre-processor(전처리기)가 컴파일 전에 코드를 적절한 상태로 처리해요. #로 시작하는 #include 같은 전처리기 구문으로 헤더 파일을 불러오거나 기호 상수를 정의해서 코드 상에 필요한 내용을 먼저 채워주는 역할을 해요. 1. Compiler가 각 소스 파일들을 컴파일해서 .o(obj)파일로 변환하고 2. Linker가 여러 오브젝트 파일을 하나의 오브젝트 파일로 묶어요. 이때 생긴 하나의 오브젝트 파일이 우리가 보는 .exe파일, 실행 파일이에요. 3. 이 파일을 실행시키면 운영체제의 Loader에 의해 메모리에 적재되어요. Compiler 프로그래머가 C등의 문법에 의해 작성한 소스를 기계어로 번역해서 위의 오브젝트 파일에 넣는 역할을 해요. 그리고 각각 소스 파일에 대한 Symbo..
#include #include #include void free(int** mtx, int n) { for (int i = 0; i < n; i++) free(*(mtx + i)); free(mtx); } int **addmtx(int** mtx1, int** mtx2, int rn, int chk) { int** res; res = (int**)malloc(sizeof(int*) * rn); for (int i = 0; i < rn; i++) { res[i] = (int*)malloc(sizeof(int*) * rn); for (int j = 0; j < rn; j++) { if (mtx2[i][j] && chk) res[i][j] = mtx1[i][j] + mtx2[i][j]; else if(mtx..
//다른 곳에서는 메인 메모리를 편의상 메모리라고 했지만 여기서는 혼동을 방지하기위해 메인 메모리라고 풀 네임으로 썼어요. 컴퓨터는 다양한 저장장치가 사용되는데 속도(CPU가 접근하는데 걸리는 시간), 용량, 가격(비트당 단가)의 차이에 따른 분류를 할 수 있어요. 아래의 그림에서 아래에 있을수록 가격이 감소하고(용량이 증가하고) 속도가 느려져요. 그러니까 싸고(크고) 느린 저장장치가 비싸고(작고) 빠른 저장장치를 보완해줘요. 여기서 프로그램이 실행되기 위해서는 반드시 메인 메모리에 있어야 해요. 그 중 일부분이 캐시로, 또 그 중 실행할 명령어는 CPU 레지스터에 적재되어서 실행 과정을 거쳐요. Register CPU는 여러 레지스터를 가지고 있는데 알다시피 메인 메모리보다 빠르지만 크기가 작아요. 시..
운영체제는 크게 커널과 유틸리티 프로그램으로 나뉘어요. Kernel 사용자와 응용 프로그램을 위해 가장 빈번히 사용되는 기능을 담당하는 부분이에요. 빈번하니까 메모리에 상주(常住)해야겠죠? 계속 HDD와 메모리를 왔다 갔다 거리면 입출력 낭비니까요. 컴퓨터가 부팅될 때 메모리에 적재되고 종료될 때까지 계속 남아있어요. 운영체제의 핵심이며 핵(Nucleus, 核), 관리자, 메모리 상주 프로그램이라고 부르기도 해요. Utility program 운영체제의 프로그램 중 디스크 조각모음, 메모장 같은 자주 사용되지 않는 프로그램들은 HDD에 두고 필요할 때 잠시 메모리에 적재시켜 실행한 후 다시 HDD로 보내면 응용 프로그램을 위한 메모리 공간을 확보할 수 있어요. 이를 유틸리티 프로그램이고 비상주(非常住) ..
컴퓨터의 여러 응용 프로그램을 설치해주고 하드웨어 장치를 효율적으로 작동하게 관리하는 자원 관리와 사용자가 컴퓨터를 손쉽게 이용할 수 있도록 해주는 User Interface를 위한 프로그램의 집단이에요. 운영체제는 컴퓨터의 하드웨어를 조정하고 관리하는 소프트웨어라는 점에서 응용 프로그램과 차이를 가져요. 컴퓨터의 기본 요소는 4가지가 있고 각각 하나 이상의 모듈이 존재해요. 이런 구성 요소들은 프로그램 수행을 위해 연결되어 있죠. CPU 컴퓨터의 동작을 제어하고 데이터를 처리해요. MIPS(Million of Instructions Per Second, 초당 n00만 개의 명령을 수행)라는 단위로 속도를 측정해요. 메인 메모리 데이터와 프로그램을 저장해요. 컴퓨터가 종료되면 내용이 사라지는 휘발성이고 ..
Process 프로그램은 파일 시스템에 존재하는 실행 파일이고 프로세스는 컴퓨터 상에 수행 중인 프로그램이에요. 실행을 위해 커널에 등록되어있고 CPU 레지스터, Program Counter 값 등의 커널에 등록된 것들을 모두 합친, 즉 프로그램 코드와 그 코드에 연계된 데이터의 집합이에요. 프로세스는 아래와 같은 구성요소를 가져요. PID(프로세스 식별 번호) 프로세스의 유일한 식별자이며 정수 번호예요. 상태 준비, 실행, 대기, 보류 등의 상태를 나타내요. 우선순위 스케줄링을 할 때 사용되는 다른 프로세스들과의 상대적인 우선순위 수준을 나타내요. Program Counter(프로그램 계수 計数) 프로그램에서 다음에 수행될 명령어의 주소 값을 가지고 있어요. 메모리 포인터 프로그램과 데이터가 저장되어있..