본문 바로가기

잡동사니11

[운영체제] 메모리구조 [ 기본 메모리 구조 ] 메모리 구조는 왼쪽에서 보시는 바와 같이 기본적으로 4개의 영역으로 나눌수 있습니다. 첫 번째 위치하는 코드영역은, CPU가 읽을 수 있는 기계어들이 메모리에 적재되는 공간입니다. 두 번째 영역은 ‘초기화된 영역’과 ‘초기화 안된 영역’을 합쳐 우리는 데이터영역이라고 얘기하며, 전역변수와 정적변수등이 실제로 적제되는 메모리 공간입니다. 세 번째 영역은 힙 영역으로서, 사용자가 메모리할당을 시도할 때 이 공간을 쓰게 됩니다. 마찬가지로 공유 라이브러리 및 프로그램 내부의 라이브러리 함수들이 이 곳에 적재되게 됩니다. 네 번째에 저장되는 공간은 ‘스택’영역으로서 함수 호출(콜러와 콜리)과 관련된 정보들이 위치하게 되고, 함수의 인자,return address, 그리고 함수 내에서 사.. 2016. 5. 6.
[시스템] 어셈블리어 정리 1. Register 가. 범용 레지스터 1) EAX(Extended Accumulator Register) 곱셈, 나눔셈 명령에서 자동으로 사용하고 함수의 리턴 값이 저장되는 용도. 대부분의 레지스터가 포함된 연산에 들어간다고 보면 됨. 2) EBX(Extended Base Register) ESI나 EDI와 결합하여 인덱스로 사용. 3) ECX(Extended Counter Register)반복 명령어 사용시 카운터로 사용.ECX에 반복할 횟수를 지정하여 반복 작업을 수행. 4) EDX(Extended Data Register)EAX와 같이 사용하여 부호 확장 명령 등에 사용. 5) ESI(Extended Source Index) 데이터 복사나 조작할 때 Source Data의 주소를 저장. EDI .. 2016. 5. 5.
[운영체제] 다중 스레드 프로그래밍 스레드 ? CPU 이용의 기본단위.스레드구성 ? 스레드 ID, 프로그램 카운터, 레지스터, 스택스레드는 같은 프로세스내의 다른 스레드와 코드, 데이터섹션, 운영체제 자원 공유.다중 스레드 ? 프로세스 내의 다수의 제어 스레드를 가지고 있을 경우. 현대의 소프트웨어 패키지들은 대부분 다중 스레드를 이용한다. 예 ) 웹서버의 경우 프로세스 안에 여러 스레드를 만들어 클라이언트의 요청을 listen 하는 별도의 스레드 생성.요청이 들어올시에 프로세스를 생성하지 않고, 새로운 스레드를 생성한다.서버는 이렇게 요청들을 병렬로 스데르르 이용하여 처리한다. - 다중 스레드 프로그래밍의 이점 응답성 : 프로그램이 계속된 요청에도 응답 가능. 하나의 명령에만 국한하지 않고 다중 명령에 대해 응답 가능자원 공유 : 프로세.. 2016. 5. 5.
[국가직] 프로그래밍언어론(봉) 언어별 비교 ( 참조 : 나무위키 - 프로그래밍 언어 )- 해석방식의 차이 컴파일(Compile) 소스코드를 미리 기계어로 변환하여 실행 ex. C언어, 델파이 인터프리터(Interpreter) 소스코드를 한줄한줄 읽어 바로 번역하여 수행 ex. 파이썬, 자바스크립트 바이트코드(Bytecode) 소스코드를 컴파일하여 바이트코드로 변환, 이를 인터프리터(JVM,닷넷 프레임워크)에서 한줄 한줄 해석하여 수행. ex. 자바, C#- 정적타입, 동적타입 정적 타입 자료형이 고정되어 있는 언어. 묵시적 형변환이 엄격함. ( C언어, 자바 ) ex. C, C++, 자바 동적 타입 자료형이 동적으로 변환될 수 있는 언어. 묵시적 형변환이 비교적 허용. ex. 파이썬,루비 _ 인터프리터 언어 - 계산모델에 따른 분류 .. 2016. 3. 28.
[컴파일러 구조와 원리] - SKIP SKIP 프로그래밍 언어의 소스 코드는 공백이나 코멘트처럼 의미가 없는 부분이 존재한다.스캔한 부분을 읽고 바로 바리기 위해서는 아래와 같이 SKIP 명령(SKIP directive)을 사용한다.이때, 토큰은 생성되지 않는다. SKIP: {| | } SKIP 대신 SPECIAL_TOKEN 명령을 사용할 수도 있으며 차이는 토큰을 보존하지 않느냐, 하느냐의 차이이다.SKIP 명령 사용시 스킵한 문자열은 접근할 수 없지만 SPECIAL_TOKEN은 다음 차례의 TOKEN 명령을 통하여 다시 한번 재 접근이 가능하다. 1. 행 코멘트 스킵SPECIAL_TOKEN : {} 문자열 “//”를 만나고, .. 2015. 12. 31.
[컴파일러 구조와 원리] - TOKEN TOKEN 식별자와 예약어는 간단하게, TOKEN 명령을 사용하여 스캔할 수 있다. TOKEN: {| | --------------------------| } TOKEN {| | | | | | | | | | | | | | < ELSE : “els.. 2015. 12. 31.
[컴파일러 구조와 원리] - 어휘 해석 어휘 해석 JavaCC는 [정규표현(regular expression)] ( 1 ) 기법으로 스캐너를 표현한다. 정규표현식 * JavaCC 는 ‘문자’ .을 ~[] 로 표현한다. * JavaCC 는 ‘부정’을 ^로 쓰지 않고 ~로 표현한다. 1. 고정문자열 - 문자열 그대로 매칭을 위하여 큰따옴표(“”)로 묶어서 표현. - ex. “int” 또는 “char” 2. [시퀀스] ( 2 ) - 고정 문자열의 조합. 고정문자열이 단어라면, 시퀀스는 ‘어절’ - “ABC” “XYZ”처럼, 고정 문자열이 연속되는 것. 이 경우 “ABCXYZ”라고 써도 된다. 3. 문자클래스 - 특정 숫자나, 문자를 명확히 표현할 때, [ ]를 이용하여 사용한다. - [“X”, “Y”, “Z”] 로 표현할 경우, X 또는 Y 또는 .. 2015. 12. 31.
[컴파일러 구조와 원리] - 파서 제네레이터 (Parser Generator) 파서 제네레이터 스캐너를 생성하는 프로그램 – 스캐너 제네레이터(scanner generator) 파서를 생성하는 프로그램 – 파서 제네레이터(parser generator) 종류 문법의 취급 범위 속도 LR 파서 제네레이터 넓다 평균적 LALR 파서 제네레이터 비교적 넓다 평균적 LL 파서 제네레이터 약간 좁다 약간 빠르다 JavaCC 예제 options { STATIC = false; } PARSER_BEGIN(Adder) import java.io.*; class Adder { static public void main(String[] args) { for (String arg : args) { try { System.out.println(evaluate(arg)); } catch (ParseExc.. 2015. 12. 31.