728x90
반응형

컴퓨터(Computer Science) 205

Dining philosopher problem,식사하는 철학자 문제 [운영체제]

[컴퓨터(Computer Science)/운영체제(Operation System)] - 동기화, 세마포 : Synchronization, Semaphores [운영체제] [컴퓨터(Computer Science)/운영체제(Operation System)] - 동기화, 모니터 : Synchronization, Monitor [운영체제] 세마포나 모니터에 대한 사전 지식을 바탕으로 설명한다. 유명한 문제인데 컴퓨터랑 많이 결부지어서 언급되고는 한다. CPU의 병행 제어 문제 중의 하나로 중요하기 때문이다. 설명해보자면 우선 5명의 철학자들이 둘러앉아 있고 생각한다. 원형 테이블을 공유하며, 테이블 중앙에는 밥이 있다. 또한 철학자들은 서로 상호 대화, 행동 일절 금지이다. 만약 배고파진다면 자신의 왼쪽에 있는..

Deadlock, 교착상태란? [운영체제]

꼬리 물기해서 망한 도로의 사진이다. 이제 이 도로는 망했다. 절대 나갈 수 없다. 꼬리물기는 나쁜 것이다 빨간 불 되면 멈춰야 서로 좋다. 컴퓨터에서도 이런 현상이 일어난다는데 교착상태, deadlock이다. 알아보자 동기화에 대해 알고 있다는 가정 하에 설명한다. [컴퓨터(Computer Science)/운영체제(Operation System)] - 프로세스에서의 동기화 (Process Synchronization) [운영체제] 앞의 동기화에서 이미 알아본 현상이다. 서로의 Event를 기다리며 무한히 대기하는 상태를 말한다. **Event란 자원의 할당과 해제를 의미한다. P0는 B자원을 기다리며 A를 점유하고 P1는 A자원을 기다리며 B를 점유하고 누구하나가 자신의 자원을 내놓지 않는 한 무한 대..

캐시, Cache - 기본 원리 [컴퓨터구조]

캐시 메모리에 대해서 이어나가보자 이번에는 캐시 메모리가 어떻게 작동을 하는지 원리를 알아보겠다. 즉, Xn이 없다가 생긴 것을 보여준다. 캐시로 Xn을 올린 것인데 여기서 3가지 의문점이 들어야한다. 0. 해당 데이터가 캐시에 들어있는지 어떻게 찾는거지? 1. 없다면 해당 데이터를 어떻게 찾는거지? (즉, 답하자면 하위레벨에서 다시 찾는다.) 2. 해당 데이터를 어떻게 다른 빈칸도 아니고 저 빈칸에 놓는거지? 사실 제일 간단한 방법은 **메모리의 각 워드에 캐시 내의 위치를 할당하는 즉, 메모리 주소에 기반을 두고 할당하는 "직접 사상( direct mapping)" 이다. ** 메모리 위치는 캐시 내의 딱 한 장소에 직접 사상된다. 물론 다른 방법도 있다. 사실 캐시를 사용하기 위해 필요한 비트 수는..

PGP 암호방식 (Pretty Good Privacy)

PGP 는 하이브리드 암호의 일종이다. (대칭암호와 공개키암호를 섞었다) **그렇게 해서 대칭 암호의 장점과 공개키 암호의 장점을 더했다. 기밀성을 유지한 통신 그리고 공개키로 키 배송문제 해결, 처리속도 향상 우선 PGP의 약자는 Pretty Good Privacy 이다. 개발자는 역시나 P가 들어간다. Phil Zimmermann이 개발했다고 한다. 메시지 및 첨부파일 암호화에다 전자 서명 기능까지 더해서 굿굿굿 대칭암호방식과 공개키 암호방식을 섞어서 쓴다. ++평문을 압축해서 암호화 하는 방식을 이용한다. (전송 속도를 위함) ++압축 자체만으로는 기능성이 그다지 높아지는 것은 아니다. 공개키 암호 방식은 인증, 무결성, 부인방지를 제공해서 디지털 서명으로 많이 이용된다. 이 암호방식이 제공하는 보..

프로젝트 계획(12-4) 사용자 인터페이스(UI) 설계 [소프트웨어공학]

이번에는 사용자 인터페이스 설계를 배울 것이다. 그냥 인터페이스가 아니라 사용자 인터페이스임을 알고 알아보자 사실 우리는 소프트웨어의 개발을 프로그램을 동작을 위해 만든 것이다. 사람이 하는 일을 프로그램이 하게 하려는 것이 소프트웨어 개발의 주목적이었다. 그 분야도 사실 주로 과학 분야나 군사 분야 여서 사용자 인터페이스가 사실 필요가 없었다. 그렇지만 컴퓨터가 대중들에게 보급되고 일상생활에서 컴퓨터가 쓰이다 보니까 사용자의 인터페이스를 고려해야 했다. 컴퓨터가 적용되는 분야도 다양해졌고 사용하는 방식도 일괄처리에서 다양한 형태로 바뀌었다. 다시 말해서 사용자의 입장이 어느 시대보다 중요해진 시기가 되었다. **모든 소프트웨어는 사용자의 만족이 큰 목적이 됨 ++소프트웨어 시스템에 있어서 사용자의 만족..

Readers and Writers Problem, 동기화 [운영체제]

여기에서는 읽는 프로세스, Reader 쓰는 프로세스, Writer 2가지가 있다. 여기서 공유 데이터는 DB와 readcount가 있다. Write할 때는 db에 다른 프로세스가 접근하면 안되고 Read는 동시에 여럿이 db에 접근이 가능하다. 처음에 이해하기로는 Write에는 mutex를 보장해야해서 lock을 걸어야 하고 Read에는 lock이 필요 없다는 말이다. 과연 그럴까?? 그렇게 이해하면 안되고 db에 lock은 read가 일어날 땐 db에 lock을 걸어서 write가 못하게하는 용도고 write가 일어날 땐 db에 lock을 걸어서 read를 못하게하는 용도다. 읽기와 쓰기가 같이되면 안되기에 하는 db lock이라는 것이고 mutex는readcount에 접근할 때 올바른 readcou..

Interrupt, 인터럽트란? [운영체제]

쉽게 말하자면 interrupt는 하드웨어와 OS 간의 상호작용 수단이다. 우선 사건(event)가 발생하면 하드웨어나 소프트웨어로부터 발생한 interrupt에 의해 신호가 보내진다. **event는 일반적으로 I/O를 뜻한다. **하드웨어는 언제든 system bus를 통해 CPU에 신호를 보내 interrupt를 발생시킬 수 있다. (system bus는 main communication path로 주요 요소들과 연결되어있다.) **소프트웨어는 시스템호출(system call )을 통해 interrupt를 발생시킬 수 있다. System call은 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널함수를 호출하는 것을 의미한다. 소프트웨어로 생긴 인터럽트는 Trap이라고 한다. 일반적으로 CPU가..

프로젝트 계획(12-3) 클래스 모델링, 재사용 [소프트웨어공학]

앞에 글에서 말했던 것처럼 그림을 하나 공부하려고 한다. 또 재사용에 대해서 배우려고 한다. 해보자 우선 클래스를 이해해야 설계를 잘할 수 있다. 다시 말해서 객체가 가지는 상태와 여러 오퍼레이션 사이의 관계, 여러 오퍼레이션들이 서로 작용하는 효과를 이해해야 한다. ++분석 모델이 나타내는 선언적인 정의만으로는 이해하기 힘들다 그래서 다이어그램, 그림을 그려봐야 한다. 상태 다이어그램은 상태와 어떤 이벤트가 발생했을 때 이루어지는 상태 사이의 변환으로 구성된다. 여기서 객체를 모델링 할 때 상태는 속성값이며 이벤트는 객체에 대하여 오퍼레이션이 수행됨을 나타낸다. 어떤 이벤트가 발생하였을 때 상태가 어떻게 변하는지를 나타내면 이벤트와 상태의 관계를 정의할 수 있다. **객체의 상태를 모델링할 때 주의할 ..

프로젝트 계획(12-2) 클래스 인터페이스 [소프트웨어공학]

클래스의 인터페이스를 이번엔 정의해보려고 한다. 그렇다면 왜 중요한지부터 알아봐야겠지? 알아보자 우선 3가지 정도의 관점이 있는데 1. 클래스 구현 2. 클래스 사용 3. 클래스 확장 차례로 살펴보자 1. 클래스 구현 클래스 설계를 보고 프로그래밍 하는 개발자의 관점이다. 클래스 내부 자료구조와 각 오퍼레이션의 프로토타입을 중요하게 생각한다. 2. 클래스 사용 클래스를 이용하는 다른 클래스를 개발하는 입장에서는 클래스가 제공하는 오퍼레이션 다시 말해서 public으로 선언된 오퍼레이션에 관심이 있다. 클래스를 사용할 때 클래스가 제공하는 서비스는 무엇이며 어떻게 호출하고 지켜야 할 약속이 무엇인가인지 알아보는 것이다. 3. 클래스 확장 클래스를 확장하는 관점은 개발자의 특수한 관점인데 얘도 public ..

프로젝트 계획(12-1) 클래스 설계 [소프트웨어공학]

클래스는 앞서 많은 글들에서 다루어왔고 여기서 말하는 클래스 설계라는 것은 분석 단계에서 아직 확정되지 않은 클래스 내부 부분 중 구현에 필요한 중요한 사항을 결정하는 작업을 말한다. **즉 클래스 추출 및 클래스 간 관계 분석이다. 본격적으로 알아보자 클래스 설계는 각 클래스 내부에 초점을 두어 소속된 객체의 상태가 오퍼레이션의 호출에 따라 어떻게 변하는지를 잘 봐야한다. 다시 말해서 상태와 오퍼레이션의 관계를 잘 봐야한다는 것이다. **왜냐하면 클래스가 가지는 속성 값에 따라 오퍼레이션 구현이 달라지니까!! 그래서 객체의 상태 변화 모델링 필수라고 할 수 있다. **상태 의존적인 클래스를 구현하기 전에 먼저 객체 상태 변화에 대한 모델링은 필수적이다. 클래스 설계에 대한 몇 가지 가이드라인을 살펴보려..

728x90
반응형