본문 바로가기

전체 글

(124)
[Android] 안드로이드와 스케줄링 알고리즘 개요 오늘은 안드로이드에서 사용되는 스케줄링 알고리즘(scheduling Algorithm)에 대해서 알아보도록 하겠습니다. 안드로이드는 Linux Kernal 부터 시스템 앱까지 다양한 소프트웨어가 결합된 하나의 거대한 플랫폼 입니다. 안드로이드의 플랫폼 구조, 즉 플랫폼 아키텍처는 아래의 그림과 같습니다. 안드로이드 개발자 사이트의 설명을 인용하자면, 안드로이드란 "Android는 다양한 기기와 폼 팩터에 사용할 수 있도록 제작된 Linux 기반의 오픈소스 소프트웨어 스택" 이라고 설명할 수 있습니다. 따라서, 이러한 안드로이드 플랫폼에서도 다른 운영체제, 예를 들면 Window나 Mac처럼 컴퓨터에서 동작할 다양한 프로그램들 즉 '프로세스'의 관리를 위한 '스케줄링 알고리즘'이 적용됩니다. 스케줄링..
[Android] SQLite와 데이터 베이스 오버 플로우에 관하여 개요 최근 안드로이드 애플리케이션을 만들면서 사용자의 데이터를 영구적으로 저장하고, 분석하는 작업이 필요했는데요. 그래서, 자연스럽게 안드로이드에서 지원하는 데이터베이스, SQLite를 사용해서 DB를 설계해보았습니다. SQLite는 아래와 같이, 직접 헬퍼 클래스 (eg. DBHelper)를 선언하여 데이터베이스를 관리할 수도 있습니다. public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydb.db"; private static final int DATABASE_VERSION = 1; public DBHelper(Context context) { super(context, DATABA..
[운영체제] 선점 스케줄링(Preemptive)과 비선점 스케줄링(Nonpreemptive) 기법 개요 오늘은 지난 포스팅에 이어서 실제로 운영체제가 프로세스에게 컴퓨터 자원을 효율적으로 분배하는 전략, 즉 스케줄링 기법에 대해서 알아보도록 하겠습니다. 선점 스케줄링(Preemptive)과 비선점 스케줄링(Nonpreemptive) 기법 운영체제는 CPU, 즉 중앙처리장치라는 비싼 자원을 각 프로세스에게 공정하고 효율적으로 분배하기 위하여 다양한 전략을 채택하고 있습니다. 이 과정에서 어떤 프로세스가 운영체제로부터 중앙처리장치를 할당받은 뒤에 또 다른 프로세스가 중앙처리장치를 요구한다면, 운영체제는 ① 다른 프로세스에게 기다리게 하거나, ② 프로세스의 우선순위를 고려하여 더 높은 우선순위를 가진 프로세스에게 강제로 CPU를 할당해줄수도 있습니다. 이 때, ①의 방식으로 컴퓨터 자원을 관리 하는 기법을..
[운영체제] CPU 스케줄링과 평가 기준 개요 오늘날의 컴퓨터 시스템이 가진 자원, 즉 프로그램이 사용할 수 있는 다양한 하드웨어 장치들은 운영체제에 의하여 적절히 관리되어 집니다. 오늘은 그 중에서도 가장 중요한 자원 중 하나인 CPU(central processing unit)의 스케줄링에 대해서 알아보도록 하겠습니다. CPU 입출력의 버스트 주기(CPU I/O Burst Cycle) 프로세스의 실행은 CPU의 실행과 입출력의 대기 상태의 반복입니다. 즉, 프로세스는 이 두 가지 상태를 오가며 실행이 되고, 주어진 작업(Job)을 수행하게 됩니다. 프로세서(=CPU)의 실행은 CPU 버스트(Burst)라는 것을 통해서 이루어지며, CPU 자원을 할당받고 주어진 작업을 수행하다가, 사용자로부터 입출력을 받아야 할 때에는 입출력 버스트(I/O ..
[운영체제] 프로세스와 상태 전이 개요 프로세스의 정의는 실행중인 프로그램, 비동기적인 행위 등 여러가지로 정의할 수 있습니다. 그러나 일반적으로 “프로세스”라고 부르는 것은 “실행중인 프로그램”을 의미합니다. 하나의 프로세스가 컴퓨터 시스템 내에서 존재할 동안 그 프로세스는 계속해서 일련의 서로 구분되는 상태를 거치게 됩니다. 만일 프로세스가 CPU를 사용중이라면 실행중(running)에 있다고 말하고, CP를 사용하지 않으나 언제든지 사용할 준비를 마쳤다면 준비(ready) 상태라고 말하며 어떠한 사건이 일어나기를 기다리며 멈춰서 대기하는 상태를 보류(block) 상태에 있다고 합니다. 컴퓨터 시스템에서 CPU는 유한한 자원이므로 다양한 실행중인 프로그램 즉 프로세스들은 CPU라는 자원을 받기 위해 운영체제로부터 CPU를 쓸 수 있도..
[운영체제] 운영체제 일반 개요 오늘날의 운영체제는 대형 컴퓨터부터 MS-DOS 라는 운영체제 기반의 일반 PC까지 다양한 컴퓨터에서 사용되고 있습니다. 일반인이게 가장 유명한 마이크로 소프트사의 윈도우가 등장하기 이전에도 운영체제는 존재하였는데, 1960년대에는 운영체제는 단지 하드웨어를 제어하는 소프트웨어로 생각했습니다. 그러다 1980년 대에는 소프트웨어를 펌웨어(Firmware), 즉 마이크로 코드로 전환시켰습니다. 운영체제(Operating System)란 하드웨어를 사용할 수 있게 하기 위해 소프트웨어나 펌웨어로 작성된 프로그램이라고 정의할 수 있습니다. 운영체제는 사용자 인터페이스 정의, 하드웨어의 공동 사용, 데이터 공유, 자원 스케쥴링, 입출력 보조역할, 에러 처리 역할을 수행합니다. 이중에서 운영체제가 관리하는 ..
[CS BASIC] 네트워크(Network)와 OSI 7계층 개요 오늘은 네트워크(Network)의 정의와 OSI 7계층, 그리고 각 계층별 프로토콜까지 알아보도록 하겠습니다. 컴퓨터가 처음 발명 되었을 때에는 다이소에서 몇천원을 지불하면 구매할 수 있는 계산기와 같은 역할을 주로 수행하였습니다. 수학에서 필요로 하는 단순, 반복, 복잡한 계산에 대해서 사람과 달리 실수 없이 꾸준히 할 수 있는 훌륭한 기계였습니다. 그렇기에 과거에는 수학에서 계산의 효율성을 위해 널리 사용 되다가 점차 사용자가 늘어가다보니 컴퓨터가 수행하는 역할이 늘어갔습니다. 과거의 컴퓨터를 사용하던 컴퓨터 과학자, 수학자들은 이러한 과정 조차도 더 효율적으로 하고 싶었던 것인지, 서로 다른 컴퓨터, 즉 계산기 사이에 데이터를 주고 받으면 더 효율적으로 업무를 처리할 수 있을까 하는 생각을 가..
[CS BASIC] 암호(cipher), 암호화(encipher), 대칭키(Symmetric Key), 비대칭 키(Asymmetric Key) 개요 오늘은 서로 다른 두 컴퓨터 시스템 사이에서 데이터를 주고 받을 때 사용할 수 있는 암호화 기술과 암호에 대해 살펴보도록 하겠습니다. 암호(暗號 cipher, cypher) 란? 암호(暗號 cipher, cypher)는 정보를 이해할 수 없도록 암호화 하거나 다시 해독하기 위한 일련의 단계를 정의한 알고리즘을 말합니다. 코드를 통한 인코딩과 암호(cipher)를 통한 암호화(encipher)는 둘다 본래 뜻이 알 수 없게 한다는 점에서 같은 의미로 볼 수 있습니다. 그러나 암호학, 특히 비밀을 유지하기 위한 고전적인 암호학 관점에서는 두 개념을 서로 다르게 구분합니다. 코드는 일반적으로 여러 코드를 모아놓은 코드 사전을 통해 단어나 문장을 대체한다. 예를 들어 "UQJHSE"라는 코드는 "다음 장소..