본문 바로가기

728x90

ComputerScience

(329)
ios - 8 swift 기본문법(Array, Dictionary, Set) 1 Collection? - 여러 변수를 담을 수 있는 컨테이너 - Array, Dictionary, Set등이 있다. 2 Array - 동일한 타입의 여러 변수를 저장할 수 있는 컨테이너 - 정의 var evenNumbers: [Int] = [2, 4, 6, 8] var oddNumbers: Array = [1, 3, 5, 7] - append evenNumbers.append(10) evenNumbers.append(contentsOf: [12, 14]) oddNumbers += [9, 11, 13] - empty check let isEmpty = evenNumbers.isEmpty - count let numOfElems = evenNumbers.count - 원소 접근 first, last, m..
OS 7 - Memory Management 1. Memory Management - 이제까지 OS가 프로세스를 어떻게 관리하는지 알아보았다. - 이번에는 OS의 중요한 역할 중 하나인 메모리 관리에 대해 알아본다. - Relocation - 프로세스는 실행될 준비가 되면 메모리에 올라온다. 잠깐 block되면 메모리 공간을 비워주었다가 ready상태가 될때 메모리에 올라온다. - 이렇게 프로세스들이 swap되는 일은 매우 빈번하게 일어나기 때문에 항상 메모리의 같은 위치에 프로세스가 올라가도록 할 수는 없다. - 프로세스가 메모리의 500 번지에 올라가 있다고 가정하자. branch명령으로 200번지를 건너뛴다면 700번지에 있는 명령어를 참조하게 된다. - 만약 이 프로세스가 block되었다가 이번에는 1000번지에 올라가게 되었다고 해보자. ..
OS - 6 Concurrency: Deadlock and Starvation 1. Deadlock - 1번부터 4번까지의 자동차를 프로세스라고 생각하고 각자 교차로를 빠져나가기 위해 a,b,c,d라는 자원을 획득해야하는 상황을 가정해보자. - 2번은 3번이 비켜주길 원하고 3번은 4번이 비켜주길 원하면서 네 차량 모두 block된 상태를 Deadlock이라고 한다. - 즉 서로 다른 프로세스가 서로 작업이 끝나길 기다리면서 나아가지 못 하는 상태를 의미한다. - 이번에는 프로세스가 메모리를 요청하는 과정에서 Deadlock이 발생하는 경우를 살펴보자 - 총 할당 가능한 메모리 공간은 200KB이다 - 이때 p1, p2가 각각 80KB, 70KB의 메모리를 할당받은 상태에서 각각 또 60KB, 80KB의 메모리를 요청한다고 하면 어느 누구도 메모리를 할당 받지 못하고 서로 메모리 ..
Algorithm&DataStructure - Stack 1 Stack - 한쪽 끝에서만 자료를 컨테이너에 넣고 뺄 수 있다. (LIFO - Last In First Out) - 최근에 들어간 값이 가장 먼저 나온다. - 이런 특징으로 다양한 문제 해결에 적용 가능하다. - 배열 혹은 list를 활용하여 여러 구현이 가능하다. S.top(): 스택의 가장 윗 데이터를 반환 S.pop(): 스택의 가장 윗 데이터를 삭제 S.push(): 스택의 가장 위에 데이터 삽입 S.empty(): 스택이 비었다면 1 반대의 경우 0 반환 2 구현 (vector기반) - Stack.h #ifndef __Stack_h_ #define __Stack_h_ #include using namespace std; template class Stack{ private: int top;..
OpenGL - 6 Shaders (2) 6.5 More attributes! - 이전 chapter에서 VBO를 채우는 방법과 vertex attribute pointer를 configure해서 VAO에 이 attributes들을 담는 방법을 살펴봤다. - 이번에는 3 floats color data를 vertices array에 더해 주자. - vertices는 각각의 좌표, 색의 대한 정보를 가지고 있는 배열이다. float vertices[] = { // positions // colors 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom right -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // bottom left 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f..
ios - 7 swift 기본문법(Function, Optional) 1 Function - 매개변수가 있을 때와 없을 때 함수 정의 및 실행 방법 func printName() { print("jsdysw"); } printName(); func printTotalPrice(price: Int, count: Int) { print("Total Price : \(price * count)") } printTotalPrice(price:1000, count: 5) - 함수를 호출할때 매개변수의 이름을 안쓰고 값만 넘겨주고 싶다면 매개변수 앞에 _를 써준다. - 매개변수 이름을 통해서 함수에게 값을 전달하는데 _를 쓰면 이름 없이 전달이 가능하다는 것을 의미한다. - 이렇게 외부에서 보여지는 이름을 external name이라고 한다. func printTotalPrice(_..
OS - 5.2 Concurrency: Mutual Exclusion and Synchronization 8. Monitors - 이제까지 mutual exclusion을 구현하기 위한 하드웨어의 지원 방법과 os의 지원방법을 공부했다. - 세마포어를 활용한 상호배제는 올바르게 구현하기가 어렵다. 그래서 생겨난 더 쉬운 방법이 모니터이다. - 세마포어를 프로그램으로 구현한게 모니터이다. - 이번에는 Programming Language차원에서, 좀더 high level로 비교적 쉽게 mutual exclusion을 지원하는 방법을 알아본다. - 모니터라는 공간은 공유자원과 공유자원에 대한 접근 함수가 있는 공간이다. 이 공간에는 프로세스가 하나만 존재할 수 있다. - 또한 공유 자원에 대한 접근은 모니터 내부에 있는 접근 함수를 통해서만 가능하다. - 이 한명만 존재할 수 있다는 규칙으로 상호배제가 보장되는..
OS - 5.1 Concurrency: Mutual Exclusion and Synchronization 1. Introduction - 컴퓨터의 자원(i/o device, memory 등)들은 유한하다. 이 유한한 자원을 여러 프로세스, 쓰레드가 순서대로 돌아가면서 사용해야하는데 여러 프로세스 혹은 쓰레드가 한개의 프로세서 혹은 여러 프로세서에 할당되어 작업되기 때문에 필연적으로 여러 프로세스가 동시에 공통된 자원을 요구하는 등의 문제들이 발생할 수 있다. - 이런 병렬적 수행에서 발생하는 문제들을 살펴보고 어떻게 운영체제가 프로세스와 쓰레드를 관리하는지 살펴보자. 2. Race Condition - 프로세스 혹은 쓰레드 a,b가 A라는 변수를 읽고 값을 수정한다고 해보자 이런 상황에서 a,b중 누가 먼저 실행되느냐에 따라 두 프로세스의 실행 결과가 바뀔 것이다. - 즉 하나의 자원을 여러 쓰레드가 사용하..

728x90