1. emg 센서 


1) 센서 

      • 아두이노와 호환되는 모듈 50,000 ~ 90, 000원
      • 블루투스 근전도 센서 모듈 144,000원  - 어플로도 동작한다고함


2)  가위바위보 구현

      • 비슷한것이 구현이 되있긴 한듯   
      • http://t-robotics.blogspot.kr/2014/04/blog-post.html#.WjoV2GPPhWc
      • 사람마다 상이한 신호를 갖기 떄문에 학습 알고리즘과 패턴인식 알고리즘을 필요로 한다.


3) 생체 신호의 주된연구

      • 생체 신호와 관련된 연구는 대부분 장애인 , 노인을 위한 개발
      • 의수, 의족, 로봇팔 등에서 많이 쓰임


4) 헬스와 관련한 스마트의류 

      • 운동하고 있는 부위를 시각화 함으로써, 신뢰성 있는 운동 가능


5) 휴대용 자세 감지 시스템


      • EMG 센서를 이용했을 때 영상처리에 비해 얻는 장점은 휴대성.
      • 별다른 카메라 설치 없이 부착으로 감지 가능.
      • 올바르지 않은 자세때문에 발생하는 척추질환등을 예방함.


6) 근전도 기반 조종 무선 자동차




2. 키넥트(마이크로소프트) 는 영구단종 된다는 말이 있음

1) 키넥트를 이용한 수화번역기

수화모션을 키넥트로 인식하여, 텍스트로 번역.




3.영상 내 text 검색

    • http://www.etnews.com/20170103000322 존재하긴함
    • 영상 text 화 장치.
    • 이미 존재해도 해볼만 한듯


4.블록체인



블록체인은 개발하게된다면 그냥 책보고 공부하는것도 가능할듯.





https://github.com/EtainClub/etainclub/wiki/비트코인-블락체인


5. 머신러닝으로 비트코인 모의투자 어플 만들기

    • 가격예측을 통하여, 매각시기와 매입시기를 판단하도록 한다.
    • 주식예측과 연관.





'캡스톤' 카테고리의 다른 글

1. Intro to Estimote APIs  (0) 2018.03.30
elasticsearch 자료조사  (0) 2018.03.12
12.18 회의록  (0) 2017.12.20

2.1


도톤보리 - 밤

2.2일차
오사카성 - 낮

3일차
카이유칸 - 낮
산타마리호 
이자카야

4일차
구로몬 시장

헵파이브(WEGO, 5 6 층) - 낮

나니와오유온천 ( 주유패스 무료) - 무관


5일차




'여행' 카테고리의 다른 글

오사카 계획  (0) 2017.12.18
네트워크 계층의 연결형 및 비연결형 서비스

* 데이터그램 네트워크는 네트워크 계층에서 비연결형 서비스 (connectionless service) 만을 제공

* 가상회선 네트워크 (virtual circuit network) 는 네트워크 계층에서 연결형 서비스(connection service) 만을 제공

* 트랜스포트 계층 서비스(TCP,UDP) 와 유사하지만 네트워크 계층 서비스는 다음과 같은 차이

- 호스트 사이의 서비스

- 연결형이나 비연결형 서비스 하나만 제공

- 종단 뿐만 아니라 네트워크 코아의 라우터에서도 구현


가상회선 (Virtual Circuit)

* 가상회선( VC, Virtual Circuit)

- 출발지와 목적지 호스트 간의 경로가 전화망과 같이 동작

* 성능 지향형(performance-wise)

* 출발지와 목적지 경로를 따라 네트워크 동작

- 데이터 전송 전에 각 콜(call) 의 연결 설정, 해제

- 각 패킷은 ( 목적지 호스트 주소가 아닌) VC 식별자(번호) 를 포함하여 전송

- 경로 상의 라우터는 현재 연결에 대한 상태를 유지

- 링크, 라우터 자원(대역폭, 버퍼) 들이 VC에 할당

* 전용자원 (dedicated resources ) = 예측 가능한 서비스(predictable service)



VC 구현(VC Implementation)

* VC의 구성요소

1. 출발지와 목적지 호스트 간의 경로( 일련의 링크들과 라우터들)

2. 경로에 있는 각 링크마다 부여되는 가상번호(VC 번호)

3. 경로 상 각 라우터의 포워딩 테이블 엔트리


* VC 에 속하는 패킷은 헤더 안에 ( 목적지 주소대신) VC 번호를 가짐

* VC 번호는 각 링크에서 변경될 수 있음

- 새 VC 번호는 라우팅 포워딩 테이블에서 얻음


VC 포워딩 테이블

VC 라우터는 현재 연결에 대한 연결 상태 정보를 유지! 



VC 시그널링 프로토콜

* signaling protocol

- vc 설정 및 해제를 위해 메시지를 교환하는 프로토콜

- ATM, 프레임 릴레이 , X.25에서 사용

- 오늘날 인터넷에서는 사용하지 않음


데이터그램 네트워크

* 네트워크 계층에서 콜 설정 이 없음

* 라우터는 종단 간 연결에 대한 상태 정보 필요 없음

-네트워크 수준에서의 " 연결" 개념 없음

* 패킷은 목적지 호스트 주소를 사용하여 전달

- 같은 출발지와 목적지를 갖는 패킷들이 다른 경로를 거칠 수 있음



데이터그램 포워딩 테이블


*32 비트 IP 주소    

- 40억개 이상의 주소

- 만약 라우터 포워딩 테이블이 목적지 주소마다 하나의 엔트리를 갖는다면 아주 큰 테이블이 필요


다음은 네개의 엔트리를 갖도록 나눈것!


*  Longest prefix matching

-목적지 주소의 프리픽스를 테이블 엔트리와 대응



ㅇ VC  와 데이터그램 네트워크 비교

* 인터넷 (datagram)

- 컴퓨터 사이에 데이터를 교환

* 유연한서비스 , 엄격한 타이밍 요구 없음

- 다양한 링크 유형

* 다른 특성

* 통일된 서비스 어려움

- 스마트한 종단 시스템(컴퓨터)

* 복잡한 기능(신뢰적인 데이터 전송, 혼잡제어, 순서대로 전달 등) 은 종단 시스템의 상위 계층(트랜스포트 계층) 에서 구현

* 네트워크 내부는 간단하고, 가장자리는 복잡


* ATM(VC)

- 전화망에서 발전

- 전화 통화

* 엄격한 타이밍, 신뢰성 요구

* 보장된 서비스 필요

- 간단한 종단 시스템

* 전화

* 네트워크 내부는 복잡



chapter goals : 


 * 네트워크 계층 서비스의 원리 이해

- 네트워크 계층 서비스 모델

- fowarding and routing

- 라우터 동작 방식

- 라우팅(경로 선택)

- 브로드캐스트, 멀티캐스트


 * 인터넷에서의 네트워크 계층 구현


outline : 

4.1 개요

4.2 가상회선(virtual circuit) 과 데이터그램 네트워크

4.3 what's inside a router

4.4 IP(internet protocol)

- datagram format

- ipv4 addressing

- ICMP(internet control message protocol)

- ipv6


4.5 라우팅 알고리즘

- link state(링크 상태)

- distance vector(거리 벡터)

- Hierarchical Routing(계층적인 라우팅)


4.6 인터넷에서의 라우팅

- RIP

- OSPF

- BGF

4.7 브로드캐스트와 멀티캐스트 라우팅



네트워크 계층

* 송신 호스트에서 수신 호스트로 패킷을 전달

- 송신 호스트는 트랜스포트 계층에서 세그먼트를 받아 데이터그램을 캡슐화

- 수신 호스트는 데이터그램에서 세그먼트를 추출하여 트랜스포트 계층에 전달

* 모든 호스트와 라우터에 네트워크 계층프로토콜 내장

* 라우터는 입력 링크의 IP 데이터그램의 헤더 필드를 조사하여 출력 링크로 전달


포워딩 : 라우터에 입력 링크에 도착한 패킷을 적절한 출력 링크로 이동

라우팅 : 

- 출발지에서 목적지까지 경로(path) 를 결정

- 라우팅 알고리즘

운전 여행 비유

- 라우팅은 출발지에서 목적지까지 여행을 계획하는 과정

- 포워딩은 한 교차로를 지나가는 과정



라우팅과 포워딩 간의 상호작용


연결 설정(Connection Setup_

* 일부 네트워크 계층에서의 또 다른 주요 기능은 연결 설정

- 인터넷을 제외한 ATM, 프레임 릴레이(frame relay) , X.25

* 데이터그램이 전송되기 전에 두 호스트와 전달되는 라우터들 간에 가상연결(virtual connection) 설정

- 라우터가 포함


* 네트워크와 트랜스포트 계층 연결 서비스

- 네트워크

* 두 호스트 간

* 가상 연결인 경우 전달되는 라우터 포함

- 트랜스포트

* 두 프로세스 간


* 네트워크 서비스 모델

- 송신 호스트와 수신 호스트에서 트랜스포트 계층을 연결하는 채널을 위한 네트워크 서비스 모델은?


* 개별 패킷(data gram) 을 위한 서비스

- 보장된 전달( guaranteed delivery)

- 특정 지연 시간 이내의 보장된 전달(40ms)  

* 패킷 흐름(flow)을 위한 서비스

- 순서화(in-order) 된 패킷 전달

- 보장된 최소 대역폭 (minimum bandwidth)

- 보장된 패킷 간 간격

- 두 개의 패킷 전송 사이의 송신자의 시간 간격이 수신자에서의 시간 간격과 같음(또는 변화가 특정 값보다 크지 않음) 을 보장



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
#include <algorithm>
 
typedef long long ll;
ll a,b,c;
 
ll mypow(ll a,ll b,ll c){
    ll ret = 1ll;
    while(b>0){
        if(b&1){
            ret = (ret* a) % c;
        }
        b /= 2;
        a  = (a*a) % c;
    }
    return ret;
}
 
int main(){
    freopen("input.txt","r",stdin);
    scanf("%lld %lld %lld",&a,&b,&c);
    printf("%lld",mypow(a,b,c));
}
cs


간단하다.

'알고리즘' 카테고리의 다른 글

유량 테크닉  (0) 2018.03.31
codeforces)447b  (0) 2017.12.21
알고리즘)(pow(A,B))mod C 를 logB 시간에 구하는 함수  (0) 2017.11.26
acm-cicpc 수학정복  (2) 2017.09.15
[BOJ1168] 조세퍼스 문제2  (0) 2017.01.22
[BOJ5012} 불만정렬  (0) 2017.01.22

The problem in short : 

* 저녁에는 돈을 입금하거나 ( ai < 0 ), 돈을 출금하거나 ( ai > 0) , 돈이 얼마있는지 확인( ai == 0) 을 한다.

* 단  통장에는 항상  d 보다 작거나 같은 돈이 들어있어야 하고,

*  돈을 확인할때 0이상의 돈이 존재해야 한다.

따라서 아침에 은행을 방문하는 횟수를 최소로할 때 방문횟수를 출력하자, ( 불가능하면  -1) 


The solution : 

* 은행 방문 횟수를 최소로 하기 위해서는 돈을 넣을 수 있는 한 많이 넣어야한다.

* 하지만 넣을 수 있는 한도는 뒤에 있는 입금을 고려할 떄 d를 초과하지 않아야 한다.

* 이렇게 넣는게 optimal 한가?

* 귀류법 ) 돈을 이거보다 적게 넣는다고 가정했을 때 -> 전혀 이득 볼 게 없다. 어차피 넘칠 일 은 없고, 나중에 은행 갈 횟수를 늘리게 될뿐

* 돈을 확인하는 날의 아침에 0이상이라면 은행을 가지않고, 0보다 작다면 최대한 넣을 수 있는만큼 많이 넣는다.

* 불가능 한날은? 현재 내 잔고가 음수라서 돈을 넣어야 하는데 뒤에서 넘칠 까봐 돈을 넣을 수 없는 상황이라면.

1) 넣을 수 있는 최댓값을 계산한다.

2) 이 최댓값이 음수라면 돈을 넣을 수 없는 상황이므로 불가능

3) 돈을 넣었는데에도 음수라면 불가능

* 아예 0 이 등장하지 않을 수 도 있으므로 잘 처리해줄 것


The code : 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <cstdio>
#include <algorithm>
 
using namespace std;
typedef long long ll;
ll n,d;
ll a[101000];
ll sum[101000];
ll maxifromend[101000];
int main(){
freopen("input.txt","r",stdin);
scanf("%lld %lld",&n,&d);
for(int i = 1 ; i <= n ; i++){
    scanf("%lld",&a[i]);
}
 
for(int i = 1; i <= n ; i++){
    sum[i] = sum[i-1+ a[i];
}
ll maxi = -10000000000;
for(int i = n ; i >=1; i--){
    maxi = max(maxi,sum[i]);
    maxifromend[i] = maxi - sum[i-1];
}
 
if(maxi > d){
    printf("-1");
    return 0;
}
ll curr = 0;
int cnt = 0;
bool flag = 1;
for(int i = 1; i <= n ; i++){
    if(a[i] == 0){
        if(curr >= 0){
            continue;
        }
        else{
 
            int deposit = d - maxifromend[i] - curr;
            if(deposit < 0){
                flag = 0;
                break;
            }
            if(deposit + curr < 0 )
            {
                flag = 0;
                break;
            }
            else{
                curr += deposit;
                cnt++;
            }
        }
    }
    else{
        curr += a[i];    
        if(curr > d){
            flag = 0;
            break;
        }
    }
}
 
if(flag)
printf("%d",cnt);
else
puts("-1");
 
 
 
}
cs



The feedback : 

1.  조건을 하나하나 잘 따지기

2. 나올 수 있는 범위 미리 잘 파악하기. ( maxi 값을 0부터 잡아버리는 실수 때문에 시간잡아먹음)


The Problem in Short : 

undirected weighted graph 가 주어진다.

Cost(u,v) 는 u와 v 상의 경로가 존재한다면 가장 작은 가중치의 edge 를 삭제한다. 이 과정중에서 삭제되는 간선들의 가중치의 합.

모든 u,v 의 순서쌍에 대해서  Cost(u,v)를 계산하는 것이다.



The Solution : 

lastedge(x,y) 를  x 와 y 를 분리할때 사용되는 마지막 edge 라고 하자.

lastedge가 e 인 정점들의 순서쌍의 걔수를 f(e) 라고 정의하자.

edgesum(u,v) 는 자기보다 작은 가중치 를 갖는 간선들의 합 이라고하자.

따라서 answer = 모든 edge에 대하여 (sum(u,v) * f(u,v) ) 들의 합이다.


f(u,v) 를 효율적으로 구해보자. 

디스조인트 셋은 undo  가 불가능 하므로 정점들을 분리하는 것이아니라 역으로

정점을 합쳐가는 방향으로 생각하자!


따라서 각 간선들을 큰 순서부터 같은 연결요소라면 sz(u) * sz(v)를 더해주고 아니라면 

continue 한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <cstdio>
#include <algorithm>
 
using namespace std;
typedef long long ll;
ll n,d;
ll a[101000];
ll maxifromend[101000];
int main(){
scanf("%lld %lld",&n,&d);
 
for(int i = 1 ; i <= n ; i++){
    scanf("%lld",&a[i]);
}
 
ll maxi = a[n];
for(int i = n ; i >=1; i--){
    maxi = max(maxi,maxi + a[i]);
    maxifromend[i] = maxi;
}
 
ll curr = 0;
bool flag = 1;
for(int i = 1; i <= n ; i++){
    if(a[i] == 0){
        
        if(d - maxifromend[i+1< 0){
            flag = 0;
            break;
        }
        else if(){
 
        }
        else{
            curr = d - maxifromend[i+1];
        }
    }
}
printf("%d")
 
 
 
}
cs



application Layer을 5가지 section 에서 논의한다


section 5가지

1.  인터넷에서 제공되는 nature 와 application 의 두가지를 논의한다.

client-server paradigm ,  peer-to-peer paradigm .

2. client-server paradigm의 개념에대해 논의하고, 이 paradigm 이 internet user에게 어떻게 서비스하는지.


3. predefined 거나 standard application  client-server 에 기반한, 유명한 popular applications (웹서핑, 파일 전송, 이메일보내기)


4. concept protocols peer-to-peer 파라다임. chord, pastry,kademlia 또 유명한 application 을 알아볼것이다( protocol 을 사용하는)


5. server 와 client 를 위한 c 언어 프로그램을 작성하는 것을 배울 것이다. 



2.1  INTRODUCTION

application layer 는 사용자에게 서비스를 제공한다. logical connection 을 통해서 communication  을 하는데 . 이것은 두개의 application layers 가 마치 직접연결되 있는것처럼 보이게한다. (logical 한 연결! , physical 이 아니라.) - two way

실상은 많은 devices 와 physical channels 에서 일어난다.


2.1.1 Providing Services

Internet 전에 communication network 는 네트워크 유저에게 service하도록 제공되었다 . 대부분 이 네트워크들은 그러나 한가지 특정한 서비스였다. 예를들면 전화기는 목소리서비스만. 제공 , 이러한 네트워크는 그러나 후에 다른 서비스에도 사용되었다  ( fax같이 몇몇의 hardware 를 추가 )

Internet 은 원래 같은 목적으로 designed 됐다. 그러나 TCP/IP protocol 의 layered approach 는 인터넷을 더 flexible 하게 만들었다.(postal 이나 전화기 네트워크보다). 각 층은 한개 이상의 protocol 에 의해서 만들어졌지만, 새로운 protocol 이 추가되거나 삭제 되었다. 그러나 protocol 이 각 층에 더해진다면 lower layer 에 있는것 중 하나가 사용되고, 제거된다면 higher layer 에서 제공되는 protocol 을 수정해야한다. ( 뭔소리?)


application layer 는 다소 highest layer 로써 다른 레이어와 다르다. 이 layer 의 protocol 은 다른 protocol 에게 서비스를 제공하지 않는다. 단지 transport layer의 protocol 로 부터 service를 받는다. 이것은 protocol 이 application layer에서는 쉽게 삭제 될수 있음을 의미한다.  새로운 프로토콜이 전송 계층에서 제공되는 서비스를 사용하는 한 새로운 프로토콜이 application layer 에 적용될 수 있다는것이다.

application layer 는 단지 internet user 에게 서비스를 제공하는 계층이며, 응용계층의 유연성은 새로운 응용프로토콜이 쉽게 인터넷에 추가될 수 있도록하며, 이것은 internet 의 lifetime 동안 흔하게 일어난다. 인터넷이 생성될때, 몇개의 application protocols 만이 유저가 사용가능했지만, 오늘날은 계속 더해져 왔기 때문에 갯수를 셀 수 가없다.


standard and Nonstandard Protocols

smooth operation 을 제공하기 위해서,  TCP/IP 의 첫 네가지 계층에서 사용되는 protocol은 standardized 되곡 documented 되어야한다. 그들은 WINDOWS 나 UNIX에 내장된 패키지의 부분이 된다. 그러나 application-layer protocol 은 standard 이기도하며 nonstandard 이기도하다.


standard Apllication-Layer Protocols

인터넷상에는 standardized 되고 문서화 된 프로토콜이 몇가지 존재한다. 우리는 그것을 daily interaction 에서 사용한다. 이러한 standard protocol 은 사용자간에 interact 하는 program 과 사용자에게 특정한 서비스를 제공하는 transport layer 의 쌍이다.우리는 이장의 뒷부분에서 standard application 에 대해서 논의한다. 이러한 유형의 application protocols 은 그들이 제공하는 타입이 뭔지 , 어떻게 작동하는지 알아야한다. (이 application 에서 사용할 수 있는 option 도 존재)

이러한 프로토콜의 공부는 네트워크매니저가 이러한 프로토콜을 사용할떄 일어나는 문제점을 더 잘 해결할 수 있도록 한다. 이러한 프로토콜에 깊은 이해는 또한 nonstadard protocol을 생성하는 idea  를 제공한다. 


Nonstadard Application_Layer Protocols

transport layer 와 상호작용함으로써 유저에게 서비스를 제공하는 프로그램을 작성할 수 있다면 nonstard application-layer program 을 작성할 수 있다. 후에 이장에서 우리는 이러한 프로그램을 어떻게 작성하는 지 배울 것이다. 이러한 프로토콜(internet authority 의 찬성을 필요로 하지않는, 사적으로 사용)을 만드는것은 internet 을 더욱 popular 하게 만든다 . private company 는 새로운 customized application protocol 을 만들어 그들의 사무실과 세계와의(앞에 네가지 계층에서 제공되는) 소통을 하도록한다. standard application programs 을 사용하지 않고.  프로그램을 작성하기 위해필요한것은 transport-layer protocols에서 제공되는 능한 서비스를 사용하는 것이다. (computer language 중에 하나로)


2.1.2 Application-Layer Paradigms

internet 을 사용하기 위해서는 두가지 application program (서로 소통하기 위해)  을 필요로한다. (세계의 어떤곳에 있는 컴퓨터의 프로그램과 , 다른 곳에 있는 컴퓨터의 프로그램 간) 두가지 프로그램은 인터넷 인프라스트럭쳐를 통해서 서로간에 메시지 전송을 필요로한다. 그러나 , 우리는 두 프로그램간 어떤 관계인지 생각해본 적이 없다. 두가지 application programs 은 서비스를 요청하고 제공할 수 어야하나 아니면 한가지만 가능해야 하는가?  이 두가지 paradigm 은 인터넷 발생과정동안 발전해왔다. client-server paradigm 과 peer-to-peer paradigm 이다. 우리는 간단하게 이두가지를 여기서 언급하지만 이챕터의 뒷부분에서 자세하게 배울 것이다.


Traditional Paradigm : Client-Server

Traditional paradigm 은 client-server라 불린다. 이것은 몇년 전부터 가장 잘 사용된다. 이 패러다임에서 service 제공자는 server process 라불리는 application program 이다. 이것은 연속적으로 실행중이며 , 다른 application 을 기다린다. (client process 라불림), Internet 을 통하여 연결을 만들고 service 를 요청한다. 평균적으로 특정한 타입의 서비스를 제공하는 서버 프로세스들이 존재하지만, 그러나 많은 서버 프로세스로 부터 서비스를 요청하는 많은 clients 들이 존재한다. 셔벼 프로세스는 반드시 항상 실행중이여야 한다. client process 는 client 가 서비스 받기를 원할 때 시작된다.

client-server paradigm 은 territory internet 에서의 서비스와 비슷하다. 예를들면 전화 연결센터는 서버로 , 전화를 요청하는 구독자는 client 로 여겨진다. directory cent 는 반드시 항상 준비중이여야하고 , 구독자는 잠깐동안 서비스가 필요할때 요청한다.

client-server paradigm은 두 application program 간에 커뮤니케이션이지만, 각 프로그램의 역할은 완전 다르다. 다른말로 , 우리는  client program 을 server 프로그램으로써 사용할 수 없고, 역도 그렇다. 이 장의 뒷부분에서, client-server programming 에 대해서 말할 때, 우리는 각 서비스의 타입으로 작성된 두가지 application program 을 필요로 한다. 한가지 이 패러다임의 문제점은 communication load 의 집중이 서버에게되고 , 이것은 서버는 powerful computer 여야 한다는 것을 의미한다. powerful computer 조차도 많은 고객이 동시에 서버로 연결을 시도한다면 벅차다. 또다른 문제점은 서버제공자는 기꺼이 cost 를 수용하고,  powerful server 를 만들어야한다. 이것은 service 가 서버에게 수입의 형태로 돌아와야한다. 

WWW 나 HTTP FTP SSH Emai 등이 있다. 우리는 이러한protocol 과 applcation 을 이장에 나중에서 의논할것이다.


New paradigm : peer to peer

p2p 라불리는 패러다임이 새로운 application 의 요구에 응답하기 위해 등장했다.  이 패러다임에서는 항상 실행중이고 , client 를 기다리는 서버프로세스 의 필요가 없다. responsibility 는 두 peers 가 공유한다. 인터넷에 연결된 computer 는 서비스 제공도하고 서비스를 받기도 한다. 심지어 보내는것과 동시에 받을 수도 있다.이 패러다임에 딱맞는 영역은 Internet telephony . phone 에 의한 의사소통은 그대신에 peer-to peer 활동이다. ; 계속 실행중이여야하는 party가 존재하지 않는다. 또다른 p2p paradigm 은 몇몇의 인터넷에 연결된 computer 가 서론간에 공유할필요가 있는경우이다. 예를들면 다른 인터넷유저와 공유할수 있는 파일을 가진 인터넷 유지가있다면 서버같은 파일홀더나 서버 프로세스 가 필요 없다.

p2p 는 쉽게 측정가능하고, 비용면에서 효율적이다 ( 비싼서버의 실행과 유지가 필요없어) 그럼에도불구하고, 몇가지 문제가있다. 주된 문제는 보안이다. 이것은 secure communication (분리된 서비스간) 에 보안을 생성하기가 server 에 의해서 제어된것보다 어렵다. 또다른 문제는applicability 이다. 이것은 모든 응용이 이 패러다임을 사용가능한것이 아니다. 예를들면 많지않은 인터넷 유저는 이것을 포함할 준비가 안되었다. 만약( web이 p2p 라면)

bitTorrent, Skype , IPTV internet 전화, 등등이 사용한다. 이것의 응용에대해서 이 장에서나중에 설명하고, 다른 것은 다른 챕터에서 볼것이다.


Mixed Paradigm 

application은 두 가지의 장점을 결합하기도한다. 예를들면, light-load c-s communication 은 peer 의 주소를 찾는데 사용된다. 어드레스를 찾으면 실제 서비스는 p2p 를 이용한다.!


2.2 CLIENT-SERVER PARADIGM

application layer 에서 communication 은 두 proceessr간에 일어난다. cleint 가 요청을 함으로써 communication 을 시작하고 , 서버는 그 요청을 기다리는 또다른 응용 프로그램이다. 서버가 그 요청을 handle 하고, 결과를 준비한 후 결과를 client 에게 보낸다. 이 서버의 정의는 서버는 요청이올때까지 항상실행 중이여야 한다는것이지만, client 는 필요할 때만 실행된다는 것이다. 이것은 우리가 두 컴퓨터를 연결하고 싶다면, 우리는 하나는 client 하나는 server  여야한다. 하지만 우리는 서버프로그램이 client 를 실행하기전에 실행중이여야하는것을 유의해야한다. server 의 lifetime 은 무한한것이다. 항상 실행중이고  client를 기다려야한다.  client 의 lifetime 은 유한하다. 유한개의 요청을 보내고, 응답받고, 멈춘다.


2.2.1 Application Programming Interface

client process는 어떻게 server process 와 통신할까? 컴퓨터 프로그램은 보통 미리정의된 명령어(컴퓨터가 뭘하는지 말하는) 의 셋으로 작성된다. 컴퓨터 언어는 수학적 명령어, 문자열조작 명령어, 입출력 등의 명령어의 집합이다. 우리가 만약 다른 프로세스와 통신할필요가 있다면, 우리는 우리는 TCPIP 의 네가지 하위영역에게 연결을 형성하라는 명령어를 필요로한다(, 데이터를 보내고 받고, 연결을 끊으라는. 이러한 명령어는 보통 Application Programming Interface(API) 라고 한다. interface 는 두 개체간의 명령어의 집합이다. 이 경우, 하나의 개체는 Application layer 의 프로세스고, 또다른 하나는 os 이다(4가지 레이어를 캡슐화하는). 컴퓨터 생산자는 4가지 레이어를 os안에 내장시키고 API 도 포함시켜야한다. 이 방법에서, application player 프로세스는 메시지를 주고받을때 os  와 통신 가능하다. 몇몇의 api는 통신을 위해서 디자인 되었다. 3가지가 자주쓰인다. socket interface, transport layer interface, STREAM 등이다. 이 섹션에서 우리는 간단하게 socket interface 에 대해서만 언급한다. application layer 의 일반적인 개념만 주기 위해서.

socket interface 는 버클리에서 유닉스의 환경의 일부로 사용됐다. 소켓 인터페이스는 application layer 와 os 간의 통신을 제공하는 명령어의 집합이다. 또한 이것은 프로세스와 프로세스 간의 통신도 지원한다. 소켓의 개념은 우리가 이미 프로그래밍 언어로 디자인된 명령어들을 사용할수 있도록 해준다. 예를 들면, 대부분의 컴퓨터언어 에서는 데이터를 소스나 싱크로 부터 읽고 쓸수 있다. (keyboard - source, monitor - sink, file - source or sink). 우리는 같은 명령어를 사용하여 소켓을 읽을수도 소켓으로 쓸 수도 있다. 다른말로 우리는 보내거나 데이터를 송수신하는 방법을 바꾸는 대신 그냥 source sink 를 추가하기만 하면된다. 2.5그림은 소켓과 다른 소스싱크를 비교하는 그림이다.


Sockets

소켓은 터미널이나 파일처럼 생각되지만 그것들처럼 물리적 개념은 아니다. 추상적이다. application lprogram 에서 사용되고 생성되는 자료구조이다.

우리는 application layer 가 관련되는 한, client process 와  server process 간의 통신은 두 소켓간에 통신이다. (두 ends 에서 생성된) . client 는 socket 이 요청을 받고 응답을 주는 개체라고 생각한다. 서버는 소켓이 request를 지니고 , response 를 필요로한다. 만약 두 소켓을 만들었다면, 하나에는 각 end , source 와 destination 의 주소를 정확하게,정의하고, data 를 보내고 받는 이용가능한 명령어를 사용할 수 있다. 나머지는 os 의 책임과 TCP/IP protocol 이다.


Sockets Address

client 와 server 는 two-way communication 이다. 우리는 pair of address  를 필요로한다. local(sender)  and remote(receiver). local address (한방향의) 는 다른방향으로의 remote address 이다. 역으로도 성립. c-s 패러다임에서 통신은 두 소켓간이므로, 우리는 소켓 address 의 쌍이 필요하다. local socket address 와 remote socket address . 하지만, 우리는 소켓주소를 identifiers 라는 용어로 정의한다 

 socket address 는 client 나 server 가 실행중인 컴퓨터에서 정의되어야 한다. 챕터 4에서 논의할건데, 인터넷의 컴퓨터는 유일하게 IP address 로 정의되고, 32비트 정수가 사용된다. 하지만 몇몇의 고객과 서버 프로세스는 한 컴퓨터에서 동시에 실행된다. 이것은 우리가 특정한 클라이언트와 서버를 또다른 식별자로 정의할 필요가 있다는 것이다. chapter3 에서는 application program 은 port 번호로 (16bit) 정의된다. 이것은 소켓주소가 IP address 와 port number 의 조합이어야 한다는 것이다!


socketaddress -  IP address  +  port number

socket 은 end-point 의 통신으로 정의되기 때문에 socket 은 local 과 remote 의 쌍이라고 말할 수 있다.


Example 2.1

우리는 two-level 주소를 찾을 수 있다( telephone communication 에서) . 전화번호는 조직을 정의하고, extension은 조직간에 연결을 정의한다. 전화번호는 IP address (조직을 정의) extension 은 port number 와 유사하다. 특정한 연결을 정의한다.


Finding Socket Address

클라이언트나 서버는 어떻게 socket address  를 찾을까? 상황은 각 site 마다 다르다


server site

서버는 local(server)  remote( client) 의 소켓어드레스를 필요로한다

local socket Address - local socket address 는 os 에 의해서 제공된다. os 는 그 컴퓨터의 ip 주소를 알고있다( server process 가 실행중인) . 그러나, 서버프로세스의 포트넘버는 할당될 필요가 있다. 만약 서버 프로세스가 인터넷 권한자에 의해 정의되언 표준이라면, 포트 넘버는 이미 할당되어 있다. 예를 들면 할당된 포트번호가 http 를 위한거라면 , 80번이다. 이거은 다른 프로세스로 사용될 수 없다. 우리는 잘알려진 포트번호에 대해서 3장에서 언급할 것이다. 만약 서버 프로세스가 표준이 아니라면 서버 프로세스 디자이너는 포트넘버를 고를 수 있다. 지정 된 범위안에. 서버가 실행되면, local socket address는 알게된다.


Remote Socket Address -  이 주소는 connection 을 만드는client 의 소켓 주소이다. 서버가 많은 클라이언트와 연결하기 떄문에 remote socketaddresss를 미리 알수 없다! 서버는 클라이언트가 서버와 연결하고자 할때 찾을 수 있다. 클라이언트 소켓 주소는 요청 패킷에 들어있고 이주소는 remote socket address가 된다. 다른말로 로컬 소켓주소는 고정되고 lifetime동안 사용되지만 , remote socket address 는 다른 client 마다 각각 바뀐다.


client site

client 는 local ( client) 와 remote( server)  socket address 를 필요로한다.


Local socket Address - os 의해 제공된다. ip주소를 알지만 , port number는 프로세스가 통신을 시작해야 할때 할당 받는 16비트 정수이다. 포트넘버는 Inter authority 에 의해서 정의되고, ephemeral(temporary) port number 라 불린다. os는 그러나 새로운 포트넘버가 다른 client process 에서 사용되지는 않는다. 


Remote Socket Address

remote socket address 를 찾는것은 더 힘들다. client process 가 시작하면, 연결하고자하는 서버의 소켓주소를 알아야한다. 우리는 두가지 상황을 가진다.


1. 때때로, client process 를 시작하는 사용자는 server port number 와 서버가 실행중인 컴퓨터의 아이피주소를 안다. 이것은 보통 client 와 server application 을 작성하고, 그것을 실행할 때 이다. 예를들면 이장의 마지막에서 우리는 간단한 client 와 server program  을 이 방식으로 테스트한다. 이 상황에서 프로그래머는 두조각의 정보를 제공한다 client program 을 실행할 때.


2. standard application 이 잘 알려진 포트 번호일 지라도, 대부분의 경우 우리는 IP 주소를 모른다. 이것은 어떤  web page 와 연결할때,   email 을 보낼때, 파일을 다운받을 때 등등이 있다. 이 상황에서 서버는 이름, 서버 프로세스에서 정의된 식별자를 갖는다. 예를 들면 이 식별자가 URLS www.xx.yyy 나 이메일 주소 이다. client process는 이 식별자(name ) 을 server socket address 에 밪게 변환한다. 이 client process는 보통 oprotnumber 를 안다. 잘알려진 것이므로, 그러나 IP address 는 대부분  또다른 client server application (DNS) 를 이용하여 얻는다. 우리는 나중에 DNS 에 대해서 논의한다. 하지만 인터넷에서 directory 처럼 수행된다 는것은 충분히 알고 있다. telephone directory 와 비교해보자. 우리는 누군가의 이름을 알고있다. 그러나 전화번호를 얻고싶다. 따라서 전화번호부를 통해서 번호를 찾는것이다. DNS map 도 서버 이름을 통해서 서버의 ip 주소를 찾는 것이다. 


2.2.2    Using Services of the Transport Layer

process 의 쌍은 internet 사용자, 인간과 프로그램에게 서비스를 제공한다. 그러나 프로세스 쌍은 transport layer 로 부터 제공되는 서비스를 받아야한다. 왜냐하면 application layer 에는 physical communication 이 존재하지 않기 때문에. 우리는 1장에서 간략하게 언급했다. 그리고 3장에서 자세하게 배울 것이다. 3가지 저명한 transport layer protocol 이 TCP/IP 에 있다. UDP, TCP SCTP 이다. 가장 표준 application 은 이 세가지중 하나를 사용하도록 디자인 되었다. 새로운 application을 작성할 때 우리는 어떤 프로토콜을 작성하길 원하는지 결정해야 한다. transport layer protocol 을 선택하는 것은 application process 에 수용성에 엄청난 영향을 미친다. 이 섹션에서 우리는 각 프로토콜에 의해서 제공되는 서비스를 배움으로써 standard application 이 왜 그걸 사용하는지 이해하고, application을 작성할ㄷ 때 어떤것을 써야할지 이해하도록한다.


UDP protocol

UDP 는 connectionless, unreliable,  datagram service 이다. 연결이없는 서비스란 말은 logical connection  이 two ends 간에 존재하지 않는다는걸 의미한다. 각 메세지는 datagram 이라 불리는 독립된 개체닌 패킷으로 캡슐화된다. UDP 는 같은 소스에서 같은싱크로 보내는 데이터들간에 관계를 찾아볼 수 없다. UDP 는 reliable protocol 이 아니다. 이것은 데이터가 손상되었는지 전송중에 체크함에도 불구하고, sender 에게 잃어버린 데이터를 다시 보낼것을 요구하지 않는다. udp는 장점을 지닌다 : 메시지 지향형이다. 이것은 전송될 메시지에 경계를 준다.

우리는 연결없고 비신뢰적인 서비스를 보통서비스와 비교할 수있다( 우체국을 통해) . 두 개체는 몇개의 편지를 교환 할 수있지만 우체국은 그 편지간에 아무런 연관관계를 알 수 없다. 우체국에서는 편지는 separate entity 이다(센더와 리시버간에), 만약 편지를 잃어버리거나 손상된다면, 우체국은 책임을 지지않는다 (최선을 다했음에도). application program 은 UDP 를 사용한다 이경우. 작고 간단한 메시지를 보내거나 , 속도가 신뢰성보다 중요한 응용에서. 예를들면 몇몇의  management와 multimedia applications application 이 잘 맞는다. 


TCP protocol

TCP 는 connection-oriented, reliable, byte-stream service 이다. TCP 는 두개의 end 가 logical connection 을 생성하는것을 요구한다( 몇몇의 connection 생성 패킷을 통해서) . 이 단계는 handshaking 이라하며, 몇개의 parameter (data packets의 size , chunks of data 를 보관할 size of buffer 전체 메시지가 도착할 떄 까지)  를 설립한다. handshaking process 후에, 두 end 는 데이터의 모음을 보낼 수 있다. 양방향으로. 

교환될 바이트에 번호를 부여함 으로 써, 바이트의 연속성이 체크된다. 예를 들면 몇몇의 바이트가 손실되거나 손상되면, 받는사람은 다시 보낼것을 요구한다. 이것은 TCP 를 신뢰성이있는 protocol 로 만든다.TCP 는 또한 flow control 과 congestion constrol 이 가능하다. chapter 3 에서배울것이다. TCP 프로토콜의 문제점은 메시지 지향형이 아니다 . 따라서 교환되는 메시지간에 경계를 넣을 수 없다. 

우리는 연결지향형이고 신뢰성있는 서비스를 전화 회사와 비교할 수 있다. 만약 두 집단이 우체국이아닌 전화를 통해서 통신한다면, 그들은 연결을 한번만들고 말을 어떤 기간동안 통신할 수 있다. 전화서비스는 신뢰할수 있다, 만약에 알아들을수 없는말은 다시 해달라고 할 수 있다.


SCTP protocol

SCTP 는 TCP 와 UDP 의 조합이다. tcp  처럼 scp 는 연결지향형, reliable service 이지만 byte-stream 이아니다. 이것은 message oriented protocol 이다. 게다가 , scup 는 multiple stream service 이다 ( connection 으 여려개 세움으로써)

scpt 는 보통 reliabilty 와 비록 failure 가 일어나더라도 연결이 보장된다. 두개의 장점이 혼합


2.3 STANDARD cline-server applications

인터넷의 생애동안, 몇몇의 서버 고객 프로그램은 발전되왔다. 각 application 마다, 이용가능한 옵션에 대해서 알아야한다. 이러한 앱을 사용하는방법을알고, 각각 다른 서비스를 제공하는 방법에 대해서 알게 되면, 미래에 customize app 을 생성하는데 도움을 준다. 우리는 6가지 표준 앱을배운다. http, www, 을배운다. 왜냐하면 가장 많이 쓰이므로 , 우리는 또한file transfer , electronic mail처럼 high traffic 을 갖는 것을 도입한다. 다음 우리는 원격로그인과 이게 어떻게 성립하는지 설명한다.(ㅅTELNET ,SSH 프로토콜을 사용하여) , 마지막으로 DNS 에 대해서 배우고, 이것은 모든 application program 이 application layer 식별자와 상응하는 호스트 아이피주소를 매핑하는데 사용된다. 몇몇 다른 app DHCP,SNMP는 다른 장에서 배울 것이다.


2.3.1 WORLD WIDE WEB, HTTP

우리는 먼저 WWW 에대해서 배운다. 그리고 HTTP 에대해서 배운다. ( 가장 유명한 c-s application program )


World Wide Web

web의 아이디어는 유럽에 떨어져있는 연구자들 끼리 서로의 연구에 접근하기 위하여 도입되었다. 상업적 web은 1990 년에 시작되었다

오늘날의 web 은  문서(web page) 가 전세계에서 분리되고 서로 링크되어있는 정보들의 저장소 이다. 유명함과 웹의 성장은 두가지 용어와 관계된다.  Distributed  and Linked. Distribution 은 웹을 발전시킨다. 각 웹서버는 새로운 웹페이지에 더해지고, 모든 인터넷 유저에게 알릴 수있다( 서버를 오버로딩 하지않고) , Linking 은 한 웹페이지가 다른 웹페이지(다른서버에 저장된)를 가르킬수 있다는것이다. 웹페이지의 링킹은 hypertext 를 통해서 이어지고 이거ㅅ은 인터넷 도입전에 시작되었다. 이 아이디어는 자동적으로 다른 문서를 검색하는 기계 에서 부터 왔다. 웹은 전자적으로 이 아이디어를 구현하였다. 링크된 문서를 사용자가 링크를 클릭할때 검색되도록 하였다. 오늘날 하이퍼 텍스트는 링크된 텍스트문서를 의미하고,  이건 하이퍼미디어로 바뀌어왔다. 웹페이지는 텍스트 뿐만아니라 이미지, 오디오 , 비디오까지 변화했기떄문

웹의 목적은 링크된 문서를 검색하는것을 뛰어넘는다, 오늘날 웹은 전자쇼핑, 게임도 사용된다, 누군가는 라디오 , 티비, 


Architectur

www는 오늘날 distribute client-server service 이고 client는 브라우저를 사용해 서버가 제공하는 서비스에 접근할 수 있다. 그러나 distributed 된 서비스는 sites 라고 불린다. 각 사이트는 한개 이상의 문서( webpage 를 갖는다. 웹페이지는 그러나 어떤 다른 웹페이지로의 링크를 가진다. 다른말로 웹페이지는 간단하거나 복잡하다. 간단한 웹페이지는 다른 웹페이지로의 링크가 없고, 복잡한 웹페이지는 다른 웹페이지로의 링크가 있다. 웹페이지는 이름과 주소를 갖는 파일이다.


Example 2.2

우리가 다른 텍스트를 참조하는 과학문서를 검색해야하고 , 또 어떤 이미지를 레퍼런스하는 문서를 검색해야 한다고하자. 주요 문서와 이미지는 두개의 다른 파일 ( 같은 사이트) 에 존재한다. 참도된 텍스트는 다른 사이트에 존재한다. 우리는 세개의 다른 파일을 다르므로 우리는 세개의 전체 문서를 보기위해선 세개의 transaction 을 필요로한다. 첫 transaction 은 메인 문서의 파일a 를 복사하고, 이 것은 2번쟤 3번째 파일로의 링크를 갖는다 . 메인 문서가 검색될 때, 사용자는 이미지로의 두번째 트랜잭션을 불러일으킬 수 있다. 만약 사용자가 레퍼런스 된 텍스트의 내용을 볼 필요가 있다면, 세번쨰 파일 을 클릭할 수 있다. A b 가 사이트 1에 있어도, 다른이름과 다른 주소를 갖는다.  ㅈ 




 

 

'학부공부' 카테고리의 다른 글

네트워크 2장 application Layer  (0) 2017.10.20
프언 유원희  (3) 2017.10.17

3장

서론

* Syntax(구문) : 언어의 표현식,문장 그리고 프로그램 단위형식

* Semantics(의미론) : 표현식, 문장, 프로그램 단위에 대한 의미

* syntax 와 semantics 는 언어의 의미를 제공한다.


구문기술의 일반적인 문제 : Terminology (용어들)   


* sentence(문장)  : 언어를 구성하는 알파벳으로 구성된 스트링

* language :  sentence 의 집합

* lexeme(어휘항목)  : 가장 작은 구문단위 -> 식별자, 리터럴, 연산자, 특수어

* token : 어휘항목의 한 부류


언어의 형식적 정의

* Recognizers : 문자열을 읽어서 해당 언어에 속하는지 결정한다.

이에 해당하는 구문분석기는 4장에서 배울 것이다.

* Generators : 생성자의 구조를 비교함으로써 특정 문장의 구문이 올바른지 결정 할 수 있다.


BNF , Contest_Free Grammers

* Context-Free Grammars

- Noam Chomsky 에 의해서 발명됌

- 생성 장치 유형

- Context-free languages 

* Backus_Naur Form 

- syntax of Algol 57기술하기 위해서.

- BNF 는 문맥자유언어와 거의 동일하다. 


BNF Fundamentals

* BNF 는 구문 구조에 대해서 추상화를 사용한다

syntatic variable,  nonterminal symbols, nonterminals 로 불린다.

* Terminals 는 lexmems 나 token 이다.

* LHS 는 nonterminal 을 나타내고 RHS 는 terminal 또는 nonterminal 의 문자열로 이루어진다.


* nonterminal 은 보통 꺽쇄로 표현된다

<ident_list> -> identifier | identifier, <ident_list>

<if_stmt> -> if<logic_expr> then <stmt>


* Grammar : 유한한 규칙들의 모임이라고 할 수 있다.

* start symbol 은 nonterminal 의 특정한 요소이다.


BNF Rules


* abstraction ( nonterminal symbol) 은 1개 이상의 RHS 를 가진다.

<stmt> -> <single_stmt> | begin <stmt_list> end


Describing Lists

* syntatic lists 는 recursion 을 이용해 표현된다.

<ident_list> -> ident | ident,  <ident_list>

*  derivation(유도) 는 일련의 규칙적용을 통해서 생성된다.  start symbol 이라 불리는 문법의 특정 논터미널에서부터 시작되 terminal symbol 로만 이루어진 문장으로 끝난다.


Derivations

* 유도과정에 있는 모든 string을 문장형태( sentential form) 이라고 한다.

* sentence 는 terminal symbol 로만 이루어진 sentential form 이다.

* leftmost derivation은 가장 왼쪾에 우치한 논터미널을대체하는 것이다.

* 유도에서 다른 RHS 규칙을 선택함으로써 언어의 다른 문장을 생성할 수 있다.

* 규칙 선택시 모든 가능한 조합을 선택함으로 써 언어전체를 생성할 수 있다.

* 위 언어는 무한 집합이며 제한 시간에 언어의 모든 문장을 생성할 수 없다.


Parse Tree

* hierachical 한 유도과정

* 모든 중간 노드는 논터미널 기호를 레이블로 가지며 모든 잎 노드는 터미널 기호를 레이블로 가진다. 


Ambiguity in Grammars

* 만약에 sentential form 이 두개이상의 parse tree를 가지는 경우와 필요충분조건이다.  언어 구조가 한개 이상의 파스트리를 가지면 ,그 구조의 의미는 유일하게 결정될 수 없다. 어떤 파서가 모호한 구조를 가지면 설계자가 제공하는 비문법적 정보를 사용할 수도 있다.


unambiguous expression 

* 만약 parse tree 가 연산자 우선순위를 가진다면 ambiguity 를 가지지 않는다. 


Associatively of Operator

* operator associativity  덧셈연산 결합법칙이 성립하지 않을 수도 있다

<expr> -> <expr> + <expr> | const (ambiguous)

<expr> -> <expr> + const + const ( unambiguous)


Extended BNF

*[] 대괄호 : 선택적인 부분을 말한다.

* () 소괄호 : 다중 선택 사항에 관한 것이다., 그룹으로부터 한개의 원소가 선택되어야 할 경우

* {} 중괄호 : 무한정 반복되거나 생략될수 있음을 나타낸다. 0이상의 반복!


BNF  and EBNF

* BNF

<expr> -> <expr> + <term> | <expr> - <term> | <term>

<term> -> <term> * factor | <term> / <factor> | <factor>


* EBNF

<expr> -> <term> { (+ | -) <term> }

<term> -> <factor> { (* | / ) <factor>  }


Recent Variations in EBNF

* Alternative RHS 별도의 줄에 표현한다

* 화살표 대신에 콜론이 사용된다

* 대괄호 선택사항 대신에 opt 작은첨자 사용

* 소괄호 리스트에서 선택사항을 나타내기 위해 oneof 작은첨자를 사용


Static Semantics(정적의미론)

* Nothing to do with meaning

* Context-free grammars 는 프로그래밍 언어의 모든 구문을 표현할 수 없다.

* types of operands in expression 과 같은cumbersome

* non_context-free ( 사용되기 전에 선언되는 변수들)


Attribute Grammars

* 속성문법은 parse tree nodes 에 semantic info 를 준다

* Primary value of AGs

- compiler design

- static Semantics specification


* Definition 어려워...

 속성문법은 다음의 특징들이 첨가된 문법이다.

- 각 문법기호 X 에 속성들의 집함 A(X) 를 연관시킨다.

- 각 rule은 특정 nonterminal 의 속성 값을 정의하는 함수의 집합을 가진다

- attribute consistency 를 체크하기 위한 술어함수를 지닌다.

- X0 -> x1,,, Xn 을 rule이라고 하자.


* 속성값 계산

- 만약 모든 속성이 상속된다면 트리는 top0down 으로 진행된다

- 만약 모든 속성이 합성된다면 잎노드 부터 루트 노드까지 bottom-up 으로 진행된다

- 많은 경우 두가지 모두 사용된다.


Semantics

동적의미론에 대해서 범용적으로 채택되는 표기법이 개발되지 않았다.


Operational Semantics

- 명령어의 의미는 명령어의 실행으로 발생한 컴퓨터의 상태 변화로 표현된다.

- operational semantics 을 high level language 에서 사용하기 위해선 버츄얼머신이 필요하다.

- 하드웨어 pure interpreter 는 너무 비싸다

- 소프트웨어 pure interpreter 도 문제를 지닌다

- 특정 컴퓨터의 특성에 따라서  동작을 이해하기 어렵다

- 단지 동일한 사양을 갖는 컴퓨터에서만 적용가능하다


=> 대안 : complete computer simulation

- 저급언어로 번역해주는 번역기가 필요하다

- 가상 기계를 만든다

=> 사용되는 곳 : language manual , textbook , teaching programming language


Denotational Semantics(표기의미론)

- 가장 엄격하고 널리 알려진 프로그램 의미 기술 방법

- 재귀 함수 이론에 견고하게 기반하고 있다.


* 표기의미론의 절차

- 수학적 객체와 그요소의 사례를 수학적 객체의 사례로 사상하는 함수를 정의

- 언어의 의미구성은 오직 프로그램의 변수값에 의해서 정의된다


program 의 상태는 모든 현재의 변수값이다.

s = {<i1,v1> , <i2,v2> , ... , <in,vn> }

VARMAP 을 변수이름과 상태를 입력받았을때 현재 그 변수값을 리턴하는 함수라고 정의하자


<dec_num> ->   '0' | '1' | '2' | '3' | '4' | '5' | 

              '6' | '7' | '8' | '9' | 

              <dec_num> ('0' | '1' | '2' | '3' |

                         '4' | '5' | '6' | '7' | 

                         '8' | '9')

Mdec('0') = 0,  Mdec ('1') = 1, …,  Mdec ('9') = 9

Mdec (<dec_num> '0') = 10 * Mdec (<dec_num>)

Mdec (<dec_num> '1’) = 10 * Mdec (<dec_num>) + 1

Mdec (<dec_num> '9') = 10 * Mdec (<dec_num>) + 9


( 재귀적인 성질이 강함)


* 표기의미론에 대한 평가

- 프로그램의 correctness 를 증명할 수 있다.

- 프로그램을 엄밀한 방법으로 생각할 수 있다

- 언어 디자인에 도움을 준다

- compiler 생성 시스템에 사용된다.

- 그것의 복잡성 떄문에 언어사용자들은 잘 쓰지 않는다



Axiomatic Semantics(공리 의미론)

* 수학 논리에 기반한다

* 공리적 의미론에서 사용되는 논리식을 술어 또는 단언이라고 한다.

* 이러한 단언들을 각각 그 문장에 대한 전조건과 후조건이라 부른다.


* 최약전조건 : 후조건의 유효성을 보장하는 최소로 제약된 전조건이다.

* 프로그램의 증명은 프로그램의 마지막 문장에 대한 후조건으로 사용하는 것으로 시작된다.

* 추론규칙은 한 단언의 참 값을 다른 단언들의 값에 기반하여 추론하는 방법이다.

상단부분을 조건부, 하단부분을 결론부라고 할 때 위부분이 참이면 결론부가 참임을 추론할 수 있다고 한다.

* 공리 : 참이라고 가정되는 논리문장이다. 따라서 조건부가 없는 추론 규칙이다.




예상문제


1. 프로그래밍 언어를 학습하는 이유를 5가지만 서술하시오

- 생각을 표현할 수 있는 능력이 향상된다

- 적합한 언어를 선택할 수 있는 배경이 향상된다.

- 새로운 언어를 배울 수 있는 능력이 향상된다.

- 구현의 중요성에 대해서 보다 많이 이해한다.

- 전반적으로 전자계산 분야의 이해가 향상된다.


1-1. 프로그래밍 언어 평가 기준은 서로 상충되는 평가기준이 있다. 4가 지 예를 들어 설명하시오(20).


판독성 : 얼마나 쉽게 읽고 이해할 수 있느냐

작성력 : 선택된 문제 영역에 대해 프로그램을 생성하는 데 언어가 얼마나 쉽게 사용될 수 있느냐

신뢰성 : 모든 조건 하에서 주어진 명세에 따라 수행한다면 신뢰적이라고 한다.

비용 : 프로그래머 교육비용, 작성비용, 컴파일비용,실행비용,구현시스템비용,신뢰성부족에따른비용,유지보수비용


상충되는평가기준

신뢰성과 실행비용

판독성과 작성력

유연성과 신뢰성

작성력과 신뢰성


1-2. 직교성의 의미, 프로그래밍 언어에 미치는 영향

적은개 수의 기본 구조들이 적은 개수의 방법으로 조합되어 언어의 제어 구조와 데이터 구조가 생성될 수 있다는것.

직교적이면 더 적은 예외사항을 갖는다. 따라서 더 높은 정규성을 의미한다.

지나치게 높은 직교성은 불필요한 복잡성을 초래할 수 있다.


1-3. 프로그래밍 언어 구현방법중 혼합형 구현 시스템에 대하여 설명

컴파일러와 순수 인터프리터 간의 절충이다. 즉, 고급 언어 프로그램을 용이한 해석이 가능하도록 설계된 중간 언어로 번역한다. 이 방법은 원시 언어 문장이 단지 한 번만 해석되기 때문에 순수해석보다 더 빠르다. 이런 구현을 혼합형 구현 시스템이라 부른다.


2. Algol 60의 가장 중요한 개발 사항을 4가지를 서술하라

- 블록 구조 개념이 도입되었다.

- 부프로그램에 매개변수를 전달하는 두 개의 다른 방법이 허용되었다.

- 프로시저는 재귀적일 수 있게 허용되었다.

- 스택-동적 배열이 허용되었다. 

 

2-1.C++는 초기에 클래스를 가진 C라고 불리어 졌다. C++의 초기 목적 은 무엇인가? 간단히 서술하시오(10)

- 클래스와 상속을 사용하여 조직될 수 있듯이 조직될 수 있는 언어를 제공하는것

- 중요한 목적은 C 와 비교해서 성능 저하가 거의 또는 전혀 없어야 한다는 것

- C가 사용될 수 있는 모든 응용에 대해서 사용될 수 있어야 한다는 것


2-2. 별칭의 3가지 예를 쓰시오

- buffer overflow

- pointers

- foreach loop 문에서 사용되기도 한다.


2-3. smalltalk 에 대해서 서술하시오. 

- smalltalk 은 객체지향 프로그래밍을 완전히 지원하는 첫 번째 프로그래밍 언어이다. 

- smalltalk 은 그래픽 사용자 인터페이스와 객체-지향 프로그래밍을 발전시켰다.

- 데이터 추상화, 상속,다이나믹 바인딩 등이 사용된다.


3. 다음 각문장과 후조건에 대해서 최약 전조건을 계산하라(20).

1.  a = 2 * ( b - 1) { a > 0} 

2*(b-1) > 0

{b > 1}  이 최약 전조건이다.

 

2. b = b + 2 * a - 1{b > 1}

b+ 2*a -1 > 1

{b > 2*a+2} 이 최약 전조건이다.


3. a = 2 * b + 1; b = a - 3 {b < 0}

a-3 < 0

a < 3 이 첫번째 배정문의 후조건이 된다.

2*b+1 < 3

{b < 1}이 최약 전조건이다.


4. 
if( x > 0) then y = y + 1 else y = y-1 { y > 0} 

then 절의 논리문에서 y +1 > 0 으로부터 y > -1 을 생성한다.

else 에 동일한 공리를 적용하여y > 1 을 생성한다. 

{y >1} => {y>-1} 이 성립하기 때문에 {y>1}  을 전조건으로 사용할수 있다.



3-1.  다음 배정문과 후조건에 대하여 각각 최약 전조건(weakest precondition)을 구하시오(20).

1. a := (b + 5) / 2 { a > 6 }

b+5 > 12

{b > 7} 이 최약 전조건이 된다.


2. a := 3 * ( 2 * b + a ) { a < 6 }

{2*b + a < 2} 이 최약전조건이 된다.


3. a := 2 * b +1; b = a 
3 {b < 0}

a<3  이 첫번째 논리문의 후조건이 된다.

2*b +1 < 3 이므로 {b<1} 이 최약 전조건이 된다.


4. 
if (x > 0 ) y := y - 1 else y := y + 1 {y > 0} 

then 절의 논리문에서 후조건 {y>0} 을 이용해 y>1 의 단언을 생성한다.

else 절의 논리문에서 후조건 {y>0} 을 이용해 y>-1 의 단언을 생성한다.

y>-1 => y>1 이므로 {y>1} 이 전조건이 된다. 


3-2. 

 1) 일반

  y = (x-5) / 2 {y < 6}

x-5 < 12

{x < 17} 이 최약 전조건이 된다.


 2) 순차

  a = 3 * (2b + a)

  b = 2 * a - 1

{b<5}

{a < 3}  이 첫번쨰 논리문의 후조건이 된다.

{2b+a < 1} 이 최약 전조건이다.


 3) if절(imply)

  if(x>0)

y = y+1

  else

y = y-1 {y > 0}

then 절의 논리문에서 후조건 {y>0} 을 이용해 y>1 의 단언을 생성한다.

else 절의 논리문에서 후조건 {y>0} 을 이용해 y>-1 의 단언을 생성한다.

y>-1 => y>1 이므로 {y>1} 이 전조건이 된다. 




 4) while절(loop불변자이용)

 while(y<>x)(y=y+1) {y = x}








3-3 . {s>1} while(s>1){s *=2 }{s=1} 책에 나와있는 문제. 이 프로그램이 옳음을 보이시오.





3-4. 문법이 주어지고 모호함을 보이시오. 모호함을 해결하시오. 

<assign> -> <id> = <expr>

<id> -> A|B|C

<expr> -> <expr> + <expr>

| <expr> * <expr>

| (<expr>)

|<id>


단순 배정문에 대한 모호한 문법

A = B + C * A

 두개의 다른 파스 트리로 표현된다.

따라서 이 모호함을 해결해보자!

<assign> -> <id> = <expr>

<id> -> A|B|C

<expr> -> <expr> + <term> | <term>

<term> -> <term> * <factor> | <factor>

<factor> -> (<expr>) | <id>


이렇게 만들고 최우단유도나 최좌단유도가 모두 같은 파스트리를 만드는것을 보이면 된다.





4. 다음 프로그램이 정확하다는 것을 증명하시오(10). { x = A AND y = B}

t = x;
x = y;

y = t; {x=BANDy= A}


5. 아래에 주어진 문법에 대하여 답하시오(20).

r1. E-> E + T r3. T-> T / F r5. F->(E)

r2. E-> T r4. T->F r6. F->id

1 id / id + id의 최좌단 유도(leftmost derivation)와 최우단 유도(rightmost derivation)을 구하시오.

2 다음 LR 파싱 테이블을 사용하여 id / id + id에 대한 LR 파싱 과정을 보이시오. 







5-1.





'학부공부' 카테고리의 다른 글

네트워크 2장 application Layer  (0) 2017.10.20
프언 유원희  (3) 2017.10.17
  1. 자손9319 2017.10.18 06:05 신고

    와... 프언을 공부하네 실화냐

    • ryul 2017.10.18 13:43

      ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ뭐야 어캐알았지

  2. ㅁㅁㅁㅁ 2018.11.12 16:28

    문제 출처가 어딘가요?

빛에너지

는 중요하다. 생명체에서 지닌 중요성을 설명할수 있다.

화학에너지를 만들 수 있다!


빛에너지 : 태양에서 나오는 빛에너지는 모든 에너지의 근원으로서 열에너지나 화학 에너지, 운동 에너지 등으로 전환 될 수 있다.

살아있는 세포는 외부에서 에너지를 얻는다.


사람이 빛에 노출된다고 생명활동에 얻을 수 있는 에너지를 만들 수는 없다.



개념 1 : 광합성

* 광합성을 통하여 유기물을 만든다. ( 광을 이용해서 유기물을 만든다)

* 유기물 ?

-  탄소를 포함하는 물질 

- 생체를 이루며, 생체 안에서 생명력에 의하여 만들어지는 물질.


=> 탄소화합물.(포도당 Glucose) 


* 광합성은 빛에너지를 화학에너지로 바꾼다

- 생명은 광합성에 의존한다.

a. 광합성은 이산화탄소와 물로부터 (포도당,산소 ) 을 만든다.

b. 광합성의 진화가 지구를 변화시켰다.


- 햇빛이 광합성의 에너지원이다.

a. 엽록체의 색소분자가 빛에너지를 포획한다.


개념2 : 엽록체

* 세포안에 들어있다. ( 태양전지를 생각할 수 있다)


* 광합성 세포는 광학성에 필요한 효소 등을 지닌 구조(즉 , 엽록체) 를 지닌다.

틸라코이드 동전들 이싸여서 그라나가 되고 그 외 부분이 스트로마 이다.

막이 두개 외막과 내막이 있다.


* 엽록체는 엽록소를 지닌다.

* 엽록소는 틸라코이드 막에 있다.

* 틸라코이드는 차곡차곡 쌓여서 그라나를 이룬다.

* 그라나가 없는부분을 스토로마라고 한다.


식물 -> 잎 -> 세포 -> 엽록체 - > 그라나 -> 틸라코이드 -> 엽록소



개념 3: 캘빈회로

빛을 포획해서 만드는 것이 ATP, NADPH ( 둘다 에너지를 가짐)

이 에너지는 포도당을 만들기 위해서 사용된다. 이 과정을 캘빈회로 라고 한다.

이 캘빈회로를 만들기위해선 CO2 가 필요하다 ( 공기중) 이걸 잡아와 포도당에 넣는걸 캘빈회로라고한다.


캘빈회로  : 포도당만들기 ( 탄소 6) 탄소가필요하다 . 이 탄소를 공기중에 이산화탄소에서 가져온다. 

용어설명

리불로오스 이인산

CO2

3- 인산글리세르산

1,3 - 이인산글리세르산

글리세르알데하이드 3인산

루비스코


탄소 고정

환원 : 원래 있던것을 원시시키는것, 어떤물질의 에너지를 plus 하는 것.

X +  전자 나 X + 수소 면 X 에 비해서 환원된 상태라고 한다.

(에너지를 더 갖게 되는 것!)


모든 용어를 기억할 필요는 없을 것이다. 목적은 탄소를 가져와 포도당을 만드는 것이다. 


캘빈회로 등장인물을 다 외울필요는 없고!

1. 루비스코가 하는 일 : 탄소 5개짜리분자를 탄소6 개로 만들어준다 ( 탄소고정!)

2. 에너지를 넣어주는 환원 단계 환원에 필요한 것 , (ATP , NADPH) 

3. 일부는 포도당으로 빠지고 일부는CO2 수용체가  RuBP 의 재생한다.( 다시 쓸 수 있도록)

여러종료의 효소가 관여하는데  가장 중요한것이 루비스코



2강 


세포호흡의 의미 : ATP 를 만든다.

세포호흡 : 물질대사 과정 중 하나로 생명체가 유기 화합물을 분해하여 에너지를 얻는 과정을 뜻한다.


ATP 의 화학적인 구조 : 아데닌  +  리보오스(5탄당)  => 아데노신

여기에 인이 2개가 붙으면 아데노신 2인산 (ADP) 아데노신 3인산 (ATP)


ATP => ADP + 에너지 + 무기인산 (가수분해 ) 


* ATP (아데노신 3인산)  리보오스 ( 5탄당) , 아데닌 과 3개의 인산기를 갖는다.

* ATP 인산기들 간의 결합은 가수분해로 끊어진다.

* 말단 인산이 끊어지면 ATP로부터 에너지가 방출된다.



개념 2 : ATP 생성

ATP 합성효소 가 어떤 막에 걸쳐져 있다.  이 합성효소에 의해서 ADP +  P가 ATP 가 된다.

ATP 가 갖고있는 에너지 공급책은 H+ 이다.


막 위쪽에 H+ 가 많이 있다. ATP 가 가지고 있는 에너지는 공간 A와 B 의 농도 차에 의한 이동하려고 하는 힘에 의해서 만들어진다.

ATP 생성 장소 : 미토콘드리아 ( 세포안에 있는 작은 소기관 ) 

외막과 내막이 울퉁불퉁하게 접혀있는 부분이 크리스테, 그 안쪾은 기질이라고 한다.


그리고 내막과 외막사이를 막간 공간이라고 한다. 

수소이온의 농도차 즉 한공간에 몰아주는 힘은 다음과 같다


NADH ->(산화 ) ->  NAD+ , 2e- ,  H+


* 전자전달계 : 미토콘드리아의 일부(외막과 내막 사이를 막간공간 이라고 하는데)

내막 안쪽은 기질. 

내막 안쪽에있는 ATP 합성효소에 의해서 ATP 가 만들어진것이다.


막간공간에 H+ 가 잔뜩있는것!! 어떻게 여기 모아놨냐?

NADH라는 놈에 의해서 모였어. NADH 는 환원이 된 상태, 이게 산화가 되면서  H+ 가 막간공간에 축적이 된다.

NADH ->  H+ 농도 -> ATP 를 만든것이다!!

ATP 가 가지고 있는 에너지는 NADH 가 만든것이다!!


엄청나게 복잡한 과정에서 ATP  가 만들어진다.


 시트르산 ( TCA ) 회로 를 돌면서 NADH 가 만들어진다  ( NADH 가 환원이 된것이다) .

피루브산에서 시작해서 , NADH 가 만들어진다. 사실은 이것은 우리가알고있는 어떤물질과 연결되있다,

그 물질은 포도당!! 포도당이 피루브산이 된 것이다. ( 포도당은 에너지를 많이 갖고있다)


이 포도당을 섭취해서 이 포도당의 에너지를 사용하고 싶으면 ATP 를 만들어야해 . 지금그 과정을 설명중.

포도당이 몇단계의 분해과정읠 거쳐서 피루브산이 되고, 시트르산회로를 돌면서 NADH 를 만든다 .


포도당 -> NADH ->  H+ 농도차이 -> ATP  를 합성


미토콘드리아 안에서 ATP 가 만들어진것이다. 



NADH => 시트르산 회로에서 온 것이다.  


이 회로에서 등장한 물질 피루브산(  포도당이 분해된 것 )  이 시트르산 회로를 돌면서 NADH 를 만든 것이다. 


이러한 모든 일들이 미토콘드리아 에서 일어난다!!  내막, 외막, 그 사이를 막간공간 이라고한다. 

내막에 ATP 합성 효소가 존재!


TCP회로(시트르산회로 - 기질) 에서 발생중. NADH 라는 물질을 만든다 . H+축적되서 ATP 합성한다. 


포도당 -> 피루브산 -> 시트르산회로 -> NADH ->  H+ 축적 ->  ATP 합성



'학부공부 > 생명과학' 카테고리의 다른 글

생명과학 7주차 웹강  (0) 2017.10.13
생명과학 6주차 웹강  (0) 2017.10.09
생명과학 5주차 웹강  (0) 2017.10.08
생명과학 4주차 웹강  (0) 2017.10.05
생명과학 3주차 웹강  (0) 2017.10.05
생명과학 2주차 웹강  (0) 2017.10.05

+ Recent posts