○Static Library (.a)

 ▷여러 개의 Relocatable Object File을 모아 index가 있는 하나의 파일로 만든다.

 ▷unresolved external reference를 resolve하면 이를 reference하게 한다.

 

 ▶생성

  ▷.o 파일을 한데 묶어 생성

 

 ▶Linking

 

 

 ▶자주 사용되는 Library

  ▷C Standard Library (libc.a)

  ▷C Math Librarry (libm.a)

 

 

 

○Dynamic Library (.so, DLLs)

 ▶Static Library의 단점을 보완하기 위해 새롭게 고안된 라이브러리

  ▷라이브러리 코드가 실행 파일내에 내장되기 때문에, 실행 파일의 크기가 커진다.

  ▷라이브러리가 동시에 여러 파일에 포함되어 실행되면 메모리 공간 효율이 떨어짐

 

 ▷필요시에 사용할 수 있도록 최소한의 정보만 포함하거나, 독립적으로 DLL을 로드/사용/해제 가능

 

 ▶Linking

  ▶load-time linking

   ▷exe 파일이 처음 load되고 실행될 때, link함. (.so)

 

  ▶run-time linking

   ▷프로그램 실행 중에 dlopen()을 통해 link함. 

   ▷dlopen(), dlsym() 작업이 선행되어야 함.

   ▷사용이 끝난 뒤에는 dlclose()를 해주어야 함.

'컴퓨터 지식 > 시스템' 카테고리의 다른 글

Process Control  (0) 2020.12.11
Exception Control  (0) 2020.12.03
Linking  (0) 2020.12.01
Memory Performance  (0) 2020.11.24
Cache Memory  (0) 2020.11.19

○Linking

 ▷obj 파일, 라이브러리 파일을 한데 묶어 실행파일로 만드는 과정

 

 ▶사용하는 이유

  ▶Modularity

   ▷여러 개의 소스파일을 모듈화하여 관리 가능하다. (각 팀이 다른 코드를 관리 가능)

   ▷자주 사용하는 함수들을 라이브러리로 만들어 사용 가능

 

  ▶Efficency

   ▷하나의 소스파일이 바뀌어도 모든 소스를 재컴파일 할 필요가 없기 때문에, 시간 절약 가능

   ▷라이브러리로 자주 사용하는 함수를 여러번 재정의할 필요가 없기 때문에, 공간 절약 가능

 

 

 ▶역할

  ▶Syombol Resoultion

   ▷프로그램은 함수명/변수명 등의 symbol을 정의하고, 이를 reference시킨다.

   ▷이런 symbol table은 obj파일의 symbol table에 배열의 형태로 있다. (이름, 크기, 위치)

   ▷linker는 각 symbol과 reference를 연결시켜준다.

 

  ▶Reolcation

   ▷각각의 code, data section을 하나로 합친다.

   ▷obj파일에 상대적으로 정해진 symbol들을 재배치시킨다.

   ▷모든 reference를 새로 정해진 위치로 Update시킨다.

 

 

 ▶Object Files 종류

   ▶Relocatable Object File (.o)

    ▷하나의 소스 파일 (.c)의 데이터, 코드의 정보를 담고 있는 파일   

    ▷ 다른 .o 파일들과 결합하여 실행파일을 만들 수 있다.

 

   ▶Executable Object File (.out)

    ▷코드, 데이터들이 메모리에 복사되어 바로 실행가능하다.

 

   ▶Shared Object File (.so)

    ▷load-time / run-time 도중에 동적으로 linking가능한 Relocatable Object File.

    ▷Dynamic Link Libraries (DLLs)라고도 부른다.

 

 

 ▶Ecutable and Linkable Format (ELF)

  ▷Linux에서 Object file에 대한 Standard binary format

  ▷ELF header : Word size, Byte ordering, File type, machine type, ...

  ▷Segment header table : Page size, virtual addresses memory segments, ...

  ▷.text section : Code

  ▷.rodata section : Read only data: jump tables, ...

  ▷.data section : Initialized lobal variables

  ▶.bss section

   ▷Uninitialized global variables

   ▷Symbol만을 가짐, 공간을 차지하지 않음?

  ▶.symtab section

   ▷Symbol table

   ▷Procedure and static variable names

   ▷Section names and locations

  ▶.rel.text section

   ▷Relocation info of .text section

   ▷명령의 주소가 exe파일에서 수정될 필요가 있음. (상대주소 - rip에서 연산)

  ▶.rel.data section

   ▷Relocation info of .data section

   ▷포인터의 주소가 exe파일에서 수정될 필요가 있음.

  ▷.debug section : symbolic debugging info (gcc -g)

  ▷.Section header table : Offsets and sizes of each section

 

 

 ▶Linker symbol

  ▶Global Symbols

   ▷해당 모듈에서 정의되어 다른 모듈에서 referenced 되는 symbol

   ▷non-static C functions, non-static global variables

 

  ▶External Symbols

   ▷다른 모듈에서 정의되어 해당 모듈에서 referenced 되는 symbol

 

  ▶Local Symbols

   ▷오직 해당 모듈에서 정의되고, referenced 되는 symbol (.bss, .data에 저장)

   ▷static-global variables

   ▷지역 변수와는 다르다. (지역 변수 - stack에 저장)

 

 

 ▶중첩 symbol

   ▷Strong : 초기화된 global variable

   ▷Weak : 초기화되지 않은 global variable / extern이 붙은 global variable

 

   ▶규칙

    ▷여러 개의 Strong : 컴파일 에러

    ▷하나의 Strong, 여러개의 Weak : Strong 선택

    ▷여러 개의 Weak : Weak중 무작위로 선택 -> 가장 위험!

 

   ▶해결책

    ▷Global variable의 사용을 피한다.

    ▷사용한다면 static/extern 한정자를 붙이거나 초기화 시킨다.

 

 

 ▶exe파일 -> Memory

 

 

'컴퓨터 지식 > 시스템' 카테고리의 다른 글

Exception Control  (0) 2020.12.03
Library  (0) 2020.12.01
Memory Performance  (0) 2020.11.24
Cache Memory  (0) 2020.11.19
Memory Hierarchy  (0) 2020.11.17

○Stream

 ▷data-processing operstions을 지원하는 Element Sequence

 ▷배열/컬렉션의 요소들을 쉽고 효율적으로 맵핑/필터링 가능 (filter, map, reduce, find, match, sort, ...)

 

 ▶Collection과의 차이점

  ▶Collection

   ▷모든 요소에 접근시에 반복문 (for/for-each)을 이용해서 순회해야 한다.

  ▶Stream

   ▷stream 내의 메소드를 이용해서 데이터들을 조작 가능하다.

 

 ▶생성

  ▶exploit values를 통해 생성

   ▷Stream.of(...)의 Static method를 통해 생성

 

  ▶Arrays를 통해 생성

   ▷Arrays.stream(array)

   ▷Stream.of(array)

 

  ▶Collection을 통해 생성

   ▷Collection.stream

 

 

  ▶파일 -> java.nio.file.Files 의 많은 Static methods

   ▷Files.lines : 줄단위로 Stream을 만듬.

 

  ▶iterate

   ▷매개변수 2개 : 시작, 증감 (limit, takeWhile 등으로 조건)

   ▷매개변수 3개 : 시작, 조건, 증감

  ▶generate

   ▷function reference를 통해 return 값으로 Stream을 만든다.

   ▷Lambda expression을 지원한다.

 

 

 ▶Operation Methods

  ▷대부분의 연산에 대해 Pipelining이 적용된다. (연산의 결과 = Stream, 입력으로 사용 가능)

  ▶Filtering

   ▷조건에 따라 Stream의 일부 element들을 가져온다.

 

   ▶filter

    ▷조건을 만족하는 element들의 stream을 반환

    ▷조건 : boolean을 리턴하는 함수형 인터페이스, 람다식으로 표현 가능

   ▶distinct

    ▷모든 요소들을 Unique하게 한다. (겹치는 element 제거)

 

   ▶takeWhile

    ▷조건을 불만족하는 element 전까지의 element들로 이루어진 Stream을 반환한다.

 

   ▶dropWhile

    ▷처음 조건이 만족한 이후의 element들로 이루어진 Stream을 반환한다.

   ▶limit

    ▷Stream에서 처음 몇개의 element만으로 새로운 Stream을 만든다.

 

 

 

  ▶sorted

   ▷Stream을 정렬함.

   ▷매개변수 없음 -> 정렬 객체에 Comparable 구현 필요

   ▷매개변수 Comparator -> 매개변수에서 Comparator 정의 필요

   ▷역순 -> .reversed()

 

  ▶map

   ▷Stream의 모든 element에 대해 적용되어, return 값으로 element를 덮어씌운다.

 

   ▶forEach

    ▷Stream의 모든 element에 대해 적용되지만, element 값에는 영향을 주지 않는다.

 

  ▶Matching

   ▷모든/일부 element가 조건을 만족하는지 확인한다.

   ▷조건 : boolean을 리턴하는 함수형 인터페이스, 람다식으로 표현 가능

   ▶anyMatch

    ▷하나라도 조건을 만족함.-> true 반환

   ▶allMatch

    ▷모두 조건을 만족함 (true)-> true 반환

   ▶noneMatch

    ▷모두 조건을 만족하지 않음 (false) -> true 반환

 

  ▶Finding

    ▷Stream에 element가 하나라도 있으면, 그 중 하나를 return한다.

    ▷Optional<T>의 형태로 return한다. -> isPresent() : 존재하는가? / get() : 값 접근

 

    ▶findAny

     ▷Stream의 무작위 element를 반환한다.

    ▶findFirst

     ▷Stream의 첫 element를 반환한다.

 

  ▶collect

   ▷stream을 List로 변환

   ▷Stream을 String으로 변환 (구분자, prefix, suffix)

 

  ▶count

   ▷Stream의 element 개수를 샌다.

 

'컴퓨터 언어 > java' 카테고리의 다른 글

Database Programming  (0) 2020.12.10
Network Programming  (0) 2020.12.08
Thread  (0) 2020.11.24
Process  (0) 2020.11.23
Exception  (0) 2020.11.19

●DOM (Document Object Model)

 ▷XML 데이터를 Tree구조로 저장하는 Parser (DOM parser)

 ▷HTML DOM과 비슷한 구조를 가진다.

 ▷문서 내 모든 요소의 객체, 속성, 메소드를 정의

 

 ▶Tree 구조

  ▷요소 노드 : 속성 노드와 텍스트 노드 또는 또 다른 요소 노드를 자식으로 가짐 (그 자체는 값을 가지지 않음)

  ▷속성 노드 : 속성의 값을 가지는 노드

  ▷텍스트 노드 : 문자열(요소의 문자열)을 값으로 가지는 노드

 

 ▶XMLHttpRequest

  ▷서버로 부터 XML 데이터를 전송받아 처리함.

 

  ▶문서 요청

   ▷status : 문서의 상태 (200:존재 / 404:존재하지 않음)

   ▷readyState : XMLHTTPRequest 객체의 상태 (UNSENT / OPENED / HEADERS_RECEIVED / LOADING / DONE)

   ▷open("GET", url, true/false) 와 send()를 통해 요청 전달 (true : 비동기적 / false : 동기적)

 

  ▶데이터 해석

   ▷responseText : 응답받은 데이터를 문자열로 저장

   ▷responseXML : 응답받은 데이터를 XML DOM으로 저장

 

 

○JS 노드 접근 메소드/속성

 ▶Common Node

  ▶멤버 변수

   ▷nodeType 종류

   ▷nodeValue 종류

   ▷nodeName 종류

 

  ▷메소드 (노드의 추가/제거)

 

 ▶NodeList

  ▷멤버 변수

 

 ▶Document

 

 ▶Element Node

 

 ▶Attribute Node

 

 ▶Text Node

'컴퓨터 언어 > JS' 카테고리의 다른 글

Ajax  (0) 2020.12.02
기타 함수(메서드)  (0) 2020.11.09
HTML DOM  (0) 2020.10.28
JSON  (0) 2020.10.28
Event  (0) 2020.10.27

○XSL (Extensible Stylesheet Language)

 ▷XML문서를 다른 텍스트 기반의 문서로 바꾸는 XML 문서

 ▷XSLT : XSL Transformation

 

 ▶선행 지시자

  ▷namespace =  http://www.w3.org/1999/XSL/Transform 

  ▷output

   ▷속성 method : 바꿀 문서 Type

   ▷속성 doctype-system = about:legacy-compact

  ▷template

   ▷속성 match =  "/" -> root에 맞춘다?

 

 ▶XPath

  ▷XML요소의 위치를 알려주는 주소.

  ▷모든 노드의 Tree 구조를 해석하지 않고, 주소를 따라 찾아간다.

  ▷모든 노드가 정상적으로 구성되어야 한다. (Schema, DTD의 문법을 어겨서는 안됨)

  ▷XML문서 직접 연결 -> xml:stylesheet processing instruction

 

  ▶규칙

   ▷/ : Root, 주소 구분자. (자식 요소)

    ▷Absolute address : /로 시작

    ▷Relative address : /로 시작하지 않음

   ▷~//* : ~의 모든 자식 노드들.

 

   ▷@~ : 속성값

 

   ▷name() : tag명

   ▷text() : start ~ end 태그 사이의 값.

 

   ▷기타

 

 ▶문법

  ▶<xsl:template match="Expression"/> : 특정 노드가 일치할 때, 해당 노드에 적용할 규칙들

   ▷<xsl:template match="/"> : 템플릿 전체를 문서와 연결

 

 

  ▶<xsl:value-of select="Expression"/> : element의 값

    ▷주소 -> @atName : attribute의 값

  ▶<xsl:apply-templates/> : 해당 node, node의 자식에 대해 template을 적용시킴.

   ▷속성 select="Expression" : Expression에 맞는 node의 자식에 대해 template을 적용시킴.

 

  ▶<xsl:for-each select="Expression"> : Expression에 맞는 자식 node들을 순회한다.

 

  ▶<xsl:sort select="Expression"> : Expression에 맞는 자식들을 정렬한다

   ▷속성 data-type : 해당 데이터 타입으로 해석한다.

    ▷number : 수 / text : 문자열 (사전순)

   ▷속성 order : 내림차(descending), 오름차(ascending)을 정한다.

 

  ▶<xsl:variable name = "varName" select="Expression"> : Expression을 만족하는 node의 값을 변수로 저장한다.

   ▷sum(v) : 만족하는 Expression의 값들의 합

'컴퓨터 언어 > XML' 카테고리의 다른 글

DTD  (0) 2020.11.18
XML  (0) 2020.11.18

+ Recent posts