본문 바로가기

전체 글

(65)
42서울(42Seoul) 라피신 후기 10월에 공식 퇴사를 하게되었고, 퇴사 절차 진행 중에 여러 부트캠프를 알아보고 있었습니다. 그 중 신청했었던 42서울 프로그램에 마침 퇴사날짜와 딱 맞춰 라피신 기간이 겹쳐, 운좋게 참여하게 되었습니다. 정말 운이 좋았습니다. 라피신은 프랑스어로 '수영장'이라는 뜻이라고 합니다. 42서울은 교사, 교재, 수업이 없는 3無 교육을 지향한다고 하는데요, 그래서 이 4주의 기간은 42서울의 교육 철학을 그대로 반영한 교육이자 평가입니다. 마치 아무것도 없이 수영장에 던져진 것처럼 교육생들은 아무것도 없이 동료들과 함께 지식을 습득하고 문제를 해결해 나가야합니다. 코딩을 배우는 과정이 수영을 배우는 과정과 비슷한 셈이네요. 휴일 없이 4주 동안 매일 클러스터에서 동료학습을 통해 성장한다는 것이 정말 특이했습니..
ArrayList의 동적 배열 할당 원리 (Java) ArrayList는 어떻게 동적으로 늘어날까요? LinkedList는 ArrayList 대비 add/delete가 빠르다는 장점이 있다고 알려져있습니다. ArrayList의 마지막 요소에 add 메서드를 실행하면 시간 복잡도가 O(1)이라고 알려져있는데, 정적 할당된 배열의 사이즈를 바꾸는 것은 새로운 정적 배열을 선언 후 복사해야하기 때문에 O(n)이 됩니다. 사실 요소를 하나하나 삽입할 때마다 배열을 재할당하면 연산량이 엄청나겠죠. 분명 내부적으로 리사이즈하는 주기를 별도로 두었을거라는 생각이 들었습니다. 자세히 살펴보기에 앞서, 먼저 Array와 ArrayList의 차이점을 알아봅시다. Array와 ArrayList의 차이 Array는 크기가 고정되어있는 정적배열, arrayList는 동적 배열이다..
배열의 메모리는 연속일까? 메모리 주소 조회 (Java) 메모리의 계층 구조와 배열 자바에서 메모리는 어떻게 관리될까요? code - data - heap - stack의 계층으로 메모리는 저장됩니다. 우리가 배열의 인스턴스를 생성한다고 생각해봅시다. 여기서 우변의 new int[10]은 length가 10인 int 배열의 인스턴스를 생성한다는 의미입니다. 자바에서 new를 사용한 인스턴스 생성은 동적할당을 의미하므로 heap 영역에 생성됩니다. 좌변의 numbers는 4 byte의 용량을 가진 참조변수입니다. 어느 객체를 참조하던지 상관없이 참조변수는 항상 같은 크기로 할당됩니다. 따라서 참조변수를 저장하는데 필요한 메모리 공간은 compile 시에 결정할 수 있습니다. 컴파일 타임에 결정되는 지역 변수, 매개 변수는 stack에 저장되죠. int[] num..
반효경 운영체제 - 2.2 쓰레드 쓰레드의 정의 “A thread (opr lightweight process) is a baic unit of CPU utilization.” Thread의 구성 program counter - 작업 위치 register set - CPU의 작업 공간 stack space - 작업 위치에 따른 함수 호출 순서 Thread가 동료 thread와 공유하는 부분(task) code section data section OS resources 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다. 쓰레드는 하나의 프로세스에서 CPU가 실행하는 곳을 여러개, 프로그램 카운터를 여러개 두어 CPU 수행 단위를 여러 개로 두는 것을 멀티 쓰레드라고 함. 동일한..
반효경 운영체제 - 2.1 프로세스 프로세스의 개념 프로세스의 문맥 CPU 수행 상태를 나타내는 하드웨어 문맥 Program Counter - 어디까지 실행했는가? 각종 Register 프로세스의 주소 공간 stack, data, code 등 메모리에 담겨있는 내용 프로세스 관련 커널 자료 구조 PCB (Process Control Block) Kernel stack System call 발생 시 프로세스 별 별도의 스택프로세스 관련 커널 자료 구조 프로세스의 상태 프로세스는 상태가 변경되며 수행된다. Running CPU를 잡고 instruction을 수행 중인 상태 Ready CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족) Blocked (wait, sleep) CPU를 주어도 당장 instruction을 수행할 수 없는 상..
반효경 운영체제 - 1. 시스템 구조와 프로그램 실행 컴퓨터 시스템 구조 Computer CPU 매 클럭 마다 메모리에서 인스트럭션을 하나씩 읽어서 수행 registers : 메모리보다 빠른 정보를 저장할 수 있는 공간 mode bit interrupt line : CPU는 메모리와만 상호작용함. 인스트럭션 실행 완료 후 interrupt line을 확인한다. Memory I/O device와 상호작용이 필요할 때, 프로그램은 권한을 OS에게 반환한다. 사용자 프로그램은 I/O 장치에 직접 접근 불가하므로 운영체제를 통해서만 요청을 수행할 수 있다. I/O 컨트롤러가 요청이 완료되었음을 확인하고 CPU에게 인터럽트를 발생시킨다. 입력된 buffer 메모리를 프로그램 메모리 공간에 copy한다. Timer OS가 cpu를 점유하다가, 사용자 프로그램에 타이머..
반효경 운영체제 - 0. 운영체제란? 운영체제의 정의 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 협의의 운영체제 (커널) : 운영체제의 핵심 부분으로 메모리에 상주하는 부분 광의의 운영체제 : 커널을 포함한 주변 시스템 유틸리티를 포함한 개념(ex, 파일 탐색기 등) 운영 체제의 목적 User 측면 : 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공. 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공함. 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행. Hardware 측면 : 컴퓨터 시스템의 자원을 효율적으로 관리 프로세서, 기억장치, 입출력 장치 등을 효율적으로 관리 실행 중인 프로그램에게 짧은 시간 씩 CPU를 번갈아 할당 실행 중..
덧셈과 가산기(Adder), 컴퓨터의 사칙 연산 원리 (Java) 사칙 연산 없이 논리 게이트만으로 이진수(비트)의 덧셈을 구현해보겠습니다. 사칙연산 - 덧셈으로부터 컴퓨터의 사칙 연산은 덧셈에서부터 이루어집니다. 우리 컴퓨터가 덧셈은 할 줄 안다고 가정하면, 1. 뺄셈은 보수를 취한 덧셈으로 계산할 수 있습니다.(부호를 나타내는 최상위 비트) 2. 곱셈은 곱하는 수만큼의 덧셈을 반복이며, 이 경우 더한 수를 세주는 계수기(counter)와 가산기가 필요합니다. 3. 나눗셈은 몫이 [1]보다 작아질 때까지 나누어지는 수에서 나누는 수를 계속 빼면서 계수기로 횟수를 세면 됩니다. 그러나 위의 곱셈과 나눗셈은 간단한 수일 경우 문제가 없겠지만 long 단위의 수를 다루게 된다면, 계산 횟수가 기하급수적으로 늘어난다는 문제가 있습니다. 곱셈의 경우, 이진수의 계산이라는 가정..