본문 바로가기

728x90

ComputerScience

(329)
PL5. Dynamic semantics : Axiomatic 1. Axiomatic Semantics program이 semantics 적으로 올바른가? 가 무슨 뜻일까? 뒤에 더 설명하겠지만 프로그램의 precondition이 axiom원리에 의해 도출된 condition과 일치하면 correct하다고 할 수 있다. 즉 프로그램이 실행 전, 후 상태가 참이면 semantics가 올바르다고 볼 수 있다. precondition이 true이고 GCD-1이 실행, 종료 뒤, postcondition이 true라는 말이다. 코드의 각 statement를 이 두 assertion을 가지고 판별한다면 아래와 같다. 즉 x:= x+4라는 프로그램의 post condition이 x = 10이라면, precondition이 {x=5}여야지 이 프로그램이 semantics상 올바..
Linux6. Makefile 1. Make make는 컴파일을 도와주는 도구이다. 예를 들어 이런 소스 코드가 있다고 하자. 이 코드를 실행하려면 다음과 같은 과정을 거쳐야 한다. 만약 후에 코드에 수정이 생기면 이 과정을 처음부터 다시 해야한다. 코드가 많아질수록 힘들다. makefile을 만들어 놓으면 이 과정을 쉽게 할 수 있다. 매크로를 사용해서 makefile을 다시 작성했다. 더 간단히 하면 이와 같다. 만약 실행파일을 여러개 만들고 싶으면 all : 뒤에 추가하면 된다.
Linux4. Design Principle of Linux Kernel 1. Monolithic vs Micro 커널은 크게 커널 내에 넣는 feature의 양에 따라 Monolithic 커널과 Micro 커널로 나눌 수 있다. 마이크로 커널은 커널의 핵심적인 부분(스케쥴링, 메모리 관리)만 커널에 담고 있다. 대부분의 커널 기능들이 user mode에 있다. 당연히 확장성과 모듈화가 좋다. 커널과 통신할때는 system call을 통해서, 모듈끼리는 Inter Process communication(IPC)로 서로 통신해야 한다. 좌측의 빨간 화살표는 function call, 우측의 화살표는 IPC이다. 반면 Monolithic Kernel은 커널 모듈끼리 function call로 통신하므로 훨씬 빠르다. IPC는 프로세스간 통신으로 message queue, shar..
Linux3. System Call 1. User mode, Kernel mode 커널은 운영체제의 중요한 부분을 일컫는 말이다. CPU, 메모리 혹은 쓰레드 패킷 등의 자원들에 직접 접근할 수 있는 부분을 말한다. CPU 스케쥴링, 메모리 관리, 입출력 관리, 파일시스템 관리 등의 업무를 맡는다. 따라서 이렇게 중요한 부분을 사용자가 접근하여 자원에 침범하는 일을 막기 위해 운영체제에서는 OS를 두가지 모드로 나누어 놓는다. - 유저 모드 사용자가 접근할 수 있는 영역으로 user application code가 이곳에서 실행된다. - 커널 모드 모든 드라이버, 메모리, cpu에 직접 접근하여 명령을 내릴 수 있다. 2. System call 프로세스는 user mode와 kernel mode를 왔다갔다 하면서 실행된다. 예를 들어 fo..
PL4. Dynamic semantics : Operational, Denotational 1. Dynamic Semantics Static semantics는 프로그램을 돌리지 않아도 알 수 있는 semantics를 검사했다. (타입이나 statement의 순서, id의 스코프 등) Dynamic semantics는 런타임에만 알 수 있는 프로그램의 뜻 (루프, if-else, 함수 호출 등)을 검사한다. 즉 Line의 의미를 묘사한다. Dynamic Semantics에는 Operational, Denotational, Axiomatic 방식이 있다. 둘다 프로그램의 상태 변화를 설명함으로써 프로그램의 의미를 나타내지만 operational은 state의 변화를 code의 동작으로 나타내고. denotianal은 state가 변하는 동작을 mathmatical functions로 나타낸다. ..
PL3. Static semantic 1. Semantic CFG, BNF만으로는 의미론적으로 문장이 올바른지 검사할 수 없다. 예를 들어 '프로그램 내에서 어떤 변수는 참조되기 전에 선언되어야한다' 라는 규칙은 BNF로 표현할 수 없다. syntax가 문장 구성 문법을 정의한다면 semantic은 문법이 의미론 적으로도 올바른지를 검사한다. semantic을 기술하는 대표적인 두가지 방법이 있다. Static Semantic, Dynamic Semantic 2. Static Semantic : Attribute Grammar Static Semantic은 compile time에 체크하는 semantic이다. Attribute Grammar는 Static Semantic의 한 종류로써 BNF에 세가지(1,2,3) Semantic Rule을..
Linux2. linux commands and tools chmod 755 test.sh nohup python3 app.py scp user@ip:remote_dir user2@ip2:remote_dir scp user@ip:remote_dir local_path df -h df -lh curl -X localhost:5000/{data} ps history | grep "echo" ls | grep "vi" > output.txt echo "hi" > test.txt echo "hello" >> test.txt cat cut_file | cut -d : -f 1,7 cat fruits.txt | sort | uniq | wc -l grep "^a" grepfile grep -i "^a" grepfile grep -i "e$" grepfile head -n ..
Linux1. Operating System? Linux? 1. Operating system An operating system (OS) is system software that manages computer hardware and software resources, and provides common services for computer programs. 2. Linux Linux is an open source software, avaliable for everyone You can customize any feature of linux so we have various distributions CentOS, Ubuntu, etc. A lot of Robot OS, Smart-factory OS, Vehicle OS, Android and Server ..

728x90