프로그래밍[Univ]/기타 11

[시스템프로그래밍] IPC. Shared Memory and Message Queueing

* Shared Memory - IPC가 메모리를 공유하여 읽고 쓰는 과정으로 이뤄진다. - IPC 기법중에서 가장 빠른 속도를 가진다. - 공유되는 메모리에 대한 접근 제어 및 동기화 기법이 필요하다. > 같은 메모리에 동시에 프로세스가 접근하여 작업하면, 원하지 않는 결과가 도출 될 수 있다. > 접근 제어 및 동기화를 위해서 세마포어를 사용한다. - malloc으로 동적할당을 하듯이 움직인다. ※ malloc : malloc을 선언할 때 Id값을 받고, 이 공간에 대한 사용이 시작될 때 메모리가 할당된다. 요청한 공간에 대해 사용이 없다면 메모리 할당은 이뤄지지 않는다. - int shmget(key_t key, int size, int flag) > 공유하는 메모리 공간을 요청하는 것으로 메모리에..

[시스템프로그래밍] IPC(Inter Process Communication) Part 2 Socket, Semaphores

* Socket - 서로 다른 System에 속한 프로세스간의 통신을 위해서 탄생하였다. - Socket은 프로세스간의 통신을 위환 출입구 역할을 한다. - Pipe, FIFO와 같은 형식으로 파일 디스크립터를 이용하여 접근을 한다. - Socket은 생성과 동시에 필요하다면, Socket에 이름을 붙여서 관리한다. - Socket의 종류에는 Virtual circuit과 Data-gram방식이 존재한다. * Socket - ⓐ Virtual circuit - stream socket - 네트워크의 Circuit switch방식을 생각하면 된다. - 통신 대상은 서로를 연결하는 네트워크를 연결하고, 그 라인을 점유한다. - 송수신이 끝날때까지 이 라인은 유지되며, 송수신이 끝나면 라인은 회수된다. - 대..

[시스템프로그래밍] IPC(Inter Process Communication) Part 1 Pipe & FIFO

* IPC(Inter Process Communication) - 프로세스들끼리 데이터를 주고 받는 기능을 수행 - Pipe/Socket과 같은 것을 이용한다. * Pipe - 메모리 버퍼 영역을 가르킨다. > 버퍼 : 각 프로세스가 통신하면서 사용하는 임시 공간 - 각 Pipe당 읽기용 포트 한개와 쓰기용 포트 한개를 갖는다. - file descriptor로 접근을 하여 파일을 읽고 쓰는 듯이 사용을 한다. - Unix계열에서 오래전 부터 사용된 IPC형식이다. > Linux shell에서 "|" 기호를 사용하여 Pipe로 사용할 수 있다. ex) ls -al | ./a.out : ls -al 의 결과(output)가 ./a.out의 input으로 작용한다. - Race Condition을 방지하기 ..

[XML] XML이란?

이번에 XML대해서 한번 이야기 해볼까한다. 나도 제대로 배운것도 아니고, 수박 겉핥기 식으로 얕고 넓게 총체적이로 배운 것을 정리하려고한다. 그렇다면 XML은 무엇인가에 대해서부터 시작해보자. * XML이란? Extensible Markup Language이다. - XML의 발달 배경운 HTML과 SGML의 단점에서 비롯된다. 그렇다면 HTML과 SGML의 단점은 무엇이 있는가? ⓐ HTML의 단점 > 고정된 Tag의 집합으로 구조화 능력이 부족하며, 단지 문서의 외형만 결정해준다. > 구조화 능력이 부족한 탓에 저장 및 검색이 효과적으로 일어나지가 않는다. ⓑ SGML의 단점 > 일단 너무 복잡하고 이식성이 낮아서 대중성이 없다. > 복잡한 탓에 사용자의 DTD(Document Type Definit..

[클래스와 객체] 클래스(Class)와 객체(Object) / 함수호출 통신

1. 클래스와 객체 - 클래스 ⓐ 하나의 타입(type)로서 공통된 것을 추출하여 일반화 ⓑ 객체/실체(object)를 만들어내는 틀로 객체가 가질 특징만을 정의 → 추상적 정의 ⓒ 데이터와 메소드(code)로 이뤄져 있다. - 객체 / 실체 ⓐ 추상화된 클래스가 Instantation과정을 거쳐 생성한 인스턴스(Instance) ⓑ 구체적 내용을 가지고 있음. ※ 인스턴스화(Instantation)과정(by Java) Student S; // 이름만 생성 S = new Student(); > new : 클래스에 객체를 생성하라고 명령 / 인스턴스화 진행 및 인스턴스 생성 > Dynamic Binding 이라고도 하며 이름에 몸체를 붙인 것이다. 2. 함수호출 통신 각각의 객체는 캡슐화에 의해 다른 객체..

[객체지향프로그래밍] 프로그램과 객체지향로의 발달

1. 프로그램이란 무엇인가? - 컴퓨터가 해야할 일을 리스트화 해놓은 것 - 데이터와 코드로 이뤄져 있음 - 프로세스를 통해 메모리의 데이터 변경 > CPU의 특정 메모리를 가져와 변형 및 결과 산출 2. 객체지향 프로그램으로의 발달 - 에셈블리언어(최초단계) ⓐ CPU가 코드를 실행하면서 Memory에서 필요한 데이터를 불러옴. - C언어(중간단계/모듈프로그램) ⓐ 프로그램의 규모가 점점 커지면서 프로그램 분할을 시작함 ⓑ 모듈(Modeul) : 프로그램을 분할한 더 작은 프로그램 ⓒ 모듈은 독자적 데이터 코드를 가지며, 프로그램은 모듈단위로 컴파일을 하고, 하나로 묶는다. - JAVA(최종단계 : 객체지향 프로그램) ⓐ 프로그램의 모듈화로 프로그랩 작성에 편의가 제공됨. But!! 한 모듈이 다른 모..

[자바] 관습적 규약

1. 공통 자바언어로 프로그램을 작성시 지켜야 될 몇몇 관습적 규약이 존재한다. 규약은 코드를 짧게 하면서 상대방에게 알기 쉽게 소스를 이해시키는데 목적을 두고 있다. 공통부분은 모든 규약에서의 기초로 2~3장에 소개된 규약에 추가적으로 항상 지켜야 되는 것이다. 공통분야에는 들여쓰기와 선언하는 방법에 대해서 소개된다. 1.1 들여쓰기 지금까지 배워온 C를 통해서도 들여쓰기의 중요성을 알 수 있었다. 자바에서 관습적 들여쓰기는 “Tab키 1번”을 사용하고 있다. 위 그림은 들여쓰기를 했을 때의 코드 모습이다. 만약 이렇게 되지 않고, 들여쓰기가 없이 다 맨 앞줄부터 시작하거나, 의미 없는 곳에서 띄어쓰기를 한다면 자신(코드작성자)이외에는 소스코드를 이해하기 힘들 것이다. 즉, “들여쓰기를 통해서 코드가 ..

[프로그램설계] 프로그램 설계시 기본적으로 생각할 것!!

프로그램 설계시 “Layer Divide”를 하는 것이다. “사람과 상호작용하는 UI부분과 실제 연산을 하는 Model부분을 나눠서 구현하는 것”이다. 이렇게 Layer를 나눠서 프로그램을 설계하면 UI가 변경되어도 실제 연산 부분을 “재사용이 유리”해진다. UI가 변경됨에 따라 문법만 수정을 해준다면 모델부분의 소스를 재사용 할 수 있다. 또한 Model이 변경되어도 사용자 UI가 변경되지 않게 만들어 사용자에게 편리함을 제공하기도 한다. 만약 UI와 Model이 서로 주고받으면서 프로그램이 작성된다면 UI가 변경되면 UI와 Model을 모두 다 다시 작성해야 하는 일이 발생한다. 즉, 프로그램을 설계시에는 커플링(coupling : 데이터 통신량)을 최소화하고, 코히즘(Cohesiem : 응집력)은 ..

[JAVA] 자바란?

1. Java "독립적인 플랫폼을 가지고 있으며, 메모리 사용량이 적은 언어"이다. 독립적 플랫폼을 통해서 자바 언어로 만들어진 프로그램은 "JVM이 설치된 어떠한 곳에서 실행이 가능"하다. 이것을 “WORA”라고하며, Write Once Run Anywhere의 약자 이다. 이러한 자바에서는 사용자의 개발을 편리하게 하기위해 미리 작성된 라이브러리를 제공해주는데 이 종류는 3가지가 있다. 자바 표준 배포판으로 독립적 프로그램 개발시 이용하는 “JavaSE(Standard Edition)”와 제한된 리소스를 가진 하드웨어환경(핸드폰, PDA등)에서의 응용프로그램 개발을 위한 “JavaME(Micro Edition)”, 그리고 기업용 배포판으로 대규모 기업, 다중 사용자 응용프로그램 개발시 이용되는 “Ja..

[OS] 운영체제 / 사용자 인터페이스

* 운영체제 OS(Operating System)의 한글표현은 “운영체제”이다. 사용자에게 컴퓨터를 사용하기 위해 필요한 사용자 인터페이스를 제공해주고, 하드웨어 사용에 편리를 제공해 주는 역할을 한다. 또한, OS는 Input과 Output을 핸들링 해주는데 사용자로부터 Input을 받아 하드웨어에 전달해주고, 하드웨어에서 나온 Output을 다시 사용자에게 전달해주는 의사소통의 수단으로도 사용이 된다. 즉, OS는 사용자로부터 받은 Input을 하드웨어에서 효율적으로 처리 하도록 유도하는 “자원관리자” 역할을 하며, 사용자에게 Input을 받아 하드웨어로 알려주고 하드웨어에서 나온 Output을 사용자에게 다시 전달하여 “컴퓨터와 사용자가 의사소통을 가능”하게 해주는 역할을 한다. 그렇다면 사용자가 ..