책- 정리 21

[Code Complete 2] 구현 설계 - 1

설계란? 소프트웨어에 대한 명세를 동작 가능한 소프트웨어로 변환 하기위한 계획에 대한 구상을 뜻한다. 훌륭한 상위 수준 설게는 여러 개의 하위 수준 설계를 무리 없이 담을 수 있는 구조를 제공한다. 훌륭한 설계는 규모가 큰 프로젝트에서는 꼭 필요한 작업이며 작은 프로젝트에서도 유용하다. 설계는 사용자의 요구사항에 따라 계속 바뀐다. 그래서 어렵다. 설계의 어려움 1. 설계란는 절충과 우선순위의 문제다. 설계자의 주요 업무중 하나가 서로 상충하는 설계 특징을 비교하여 그 특성들 사이에 균현을 맞추는 일이다. 빠른 응답 속도가 개발 시간을 최소하는 것보다 중요하다면 설계자는 그에 맞는 설계를 선택 할 것이다. 2. 설계에는 제약이 따른다. 설계의 핵심은 어느 정도는 가능성을 만들고 어느 정도는 가성능성 제한..

[Code Complete 2] 구현시 결정해야 할 핵심 사항

언어 프로그래밍의 목적에 따라 언어를 잘 골라야 하지만 대부분 고수준의 언어가 생산성이 좀더 좋다. 그리고 생성성이 비슷 하다면 익숙한 언어를 사용하는게 효율 성이 훨씬 좋다고 한다. 마지막으로 모든 프로그래밍 언어에는 장단점이 있다. 그걸 알고 모르고는 개발 생산성에 큰 영향을 미친다고 본다. 프로그래밍 규약 품질이 우수한 소프트웨어는 아키텍처의 개념적 무결성과 저수군 구현 사이의 관계가 명확하다. 구현은 반드시 아키텍처와 일관성을 유지해야 하며 내 부적으로도 일관선을 유지해야한다. 그것이 바로 변수 이름과 루틴 이름, 형식 규약, 주석 규약에 대하나 가이드라인의 핵심이다. - 아키텍처 가이드라인을 통해서 프로그램 구조적인 균형을 유지 - 구현 가이드라인을 통해서 각 클래스가 전체 적인 설계의 구성원으..

[Code Complete 2] 프로젝트 절차 (architecture 설계에서 할일)

프로젝트의 절차 1. 문제 정의 - 해결책에 대해서는 언급하지 않고 문제가 문엇인지 정의한다. - 사용자의 언어로 작성 한다. 2. 요구 사항 - 소프트웨어 시스템이 무엇을 수행해야 하는지에 대해서 상세하게 기술한다. - 해결책을 구현하기위한 첫 번째 과정 이다. - 명시적 요구사항의 필요성. - 사용자가 시스템의 기능을 주도하게 하는데 도움이 된다. - 요구사항을 명시적으로 정의함으로써 사용자가 원하는 것이 무엇인지를 알 수 있다. 3. 아키텍쳐 - 시스템 전반에 적용되는 설계상의 제약 사항을 명시한다. - 모든 설계에는 타당한 이유가 있어야 한다. - 모든 주요 결정사항에 대한 동기를 기술 해야한다. - 아키텍쳐에서 해야 할 일 1) 프로그램 구조 설계 - 프로그램 내의 중요한 빌딩 블록 을 정의 해..

1. 리눅스커널 이야기 - top 정보 활용 하기

1. 리눅스커널 이야기 - top 정보 활용 하기 top의 정보의 는 /proc/stat 의 값을 백분율의 비율로 나타 냅니다. 1. up - 서버 구동 시간 2. users - 현재 접속중인 사욛자 3. load average - 시스템이 얼마나 많은 일을 하고 있는지를 보여준다. 4. Tasks - Tasks : 총 1055개의 프로세스가 가동중 - running : 1개의 프로세스가 작동중 - sleeping : 1039개의 프로세스가 대기중 - stopped : 13개의 프로세스가 멈춘 상태 - zombie : 2개의 프로세스가 좀비 상태 5. CPU, MEM, Swap - CPU, 메모리, swap 메모리 사용량 %Cpu(s) - 0.6 us ( user level 에서 사용하고 있는 cpu 비..

7장. 파이프라인(pipeline)

파이프라인(pipeline) 1. 파이프라인(pipeline) 이란? - 프로세서에서 성능을 높이기 위해서 명령어 처리 과정으로 명령어 처리를 여러 단계로 나누어 단계별로 동시에 수행하여 병렬화를 시키는 것을 말한다. 2. pipeline 동작 방식 - 매 클록마다 여러 명령어를 중복된 단계 없이 실행 킨다. - 아래는 5단계 pipeline의 모습이다 3. 가장 효율인 pipeline 조건 - 각 단계별 처리 시간이 일정해야 한다. - 각 명령어의 처리 단계는 균일해야 한다. * 그러나 실제로는 처리 시간일 일정하지도 않고 처리 단계가 균등하지 않아서 문제가 발생한다. 이를 Hazard라고 한다. 4. 헤저드의 종류(Hazard) 1) 구조 헤저드 - 프로세서의 자원이 부족해서 발생한다. - 아래와 같..

6장. 프로세스 기본 동

프로세스 기본 동작 1. 프로세의 동작 이란? - 명령어를 처리하여 해당 명령어 맞게 레지스터 및 메모리의 상태릐 변화 시키는 것이라고 볼수 있다. 2. 프로세스의 명령어 처리 과정(5단계) 1) 명령어 인출 (Instruction Fetch, IF) 2) 명령어 해독 (Instruction Decoding, ID) 3) 피연산잘 인출 (Operands Fetch, OF) 4) 명령어 실행 ( instruction Execution, EX) 5) 결과 저장 ( Operand Store, OS 또는 write back,WB) 3. 각 명령어 처리 과정 상세 설명 1) 명령어 인출 (Instruction Fetch, IF)- PC(Program counter) 또는 IP(Instruction Pointer ..

3장. 프로세스의 기본 부품과 개념들

1. 컴퓨터 하드웨어 구성 - 큰 그림 2. 마이크로 아키텍쳐란? - 사전 적인 정의 인텔 4004는 최초의 일반용, 상용 마이크로프로세서이다.마이크로프로세서(영어: microprocessor, 문화어: 극소형처리장치(極小型處理裝置), 미크로처리장치(미크로處理裝置)) 또는 초소형 연산 처리 장치(超小型演算處理裝置)는 컴퓨터의 중앙 처리 장치(CPU)를 말한다 - 마이크로프로세서 하나를 만드는데 필요한 알고리즘 및 회로 수준의 구조를 자세히 정의한 것을 마이크로아키텍쳐 라고 한다. - 즉 CPU만드는데 필요한 설계도!!! 3. 프로세서의 내부 구조 1). 산술 논리 장치(Arithmetic Logical Unit) ALU - 프로세스 내에서 계산을 담당하는 장치 - 지원하는 연산 (1). 정수 사칙 연산 ..

2장. RISC vs CISC 차이점

1. 과거 RISC vs CISC 차이점 [ 코드 ] struct Vector{ int x; int y; int z; }data[10]; data[index].y = 0x87654321; RISC 코드 해석 ldr r1 , [sp, #4] ; r1 = index mov r3 , #0xC ; r3 = sizeof(vector) mul r2 , r1 , r3 ; r2 = index * sizeof(vector) add r3 , sp , #8 ; r3 = data add r3 , r3 , r2 ; r3 = &data[index] add r2 , r3 , #4 ; r2 = &(data[index].y) ldr r3 , [pc, #8] ; r3 = 0x87654321 str r3 , [r2] ; *(r2) = r..

5장 동기

5장 동기 책의 저자는 동기를 내제적 동기와 외제적 동기로 나누었다. 내제적 동기는 스스로하는 동기, 외제적 동기는 외부의 영향으로인해 하는 동기를 말한다.무엇이든지 지속적으로 하기위해서는 내제적 동기가 필요하다고 말한다. 그런데 이런 내제적 동기를 상실 하게 되면, 외제적 동기로 강력한 자극을 주어 내제적 동기를 꺠워야 한다고말하다. 또한 내 제적 동기를 유지 시켜주는 것중 하나로써 자율성을 말한다. 자율성과 선택 할수 있는 권리가 부여 주어지면 내제먹 동기는 유지 된다고말한다. 5장은 결론은 다음과 같다. 외제적 동기로 강력하게 내 제적 동기를 일깨우고 자율성을 통하여 내제적 동기를 유지시킨다.

책- 정리/완공 2017.02.06