<키워드 정리>
https://1-day-1-coding.tistory.com/25
네트워크 통신 - 데이터 전달
- 회선 교환 방식
- 패킷 교환 방식
Packet Switching 방법
패킷 교환(Packet Switching) 은 그 이름에서 알 수 있지만 데이터의 단위인 패킷을 이용해서 목적지의 컴퓨터로 데이터를 전달하는 방법을 말한다.
출처 : https://networkencyclopedia.com/
작은 블록의 패킷을 데이터를 전송하고 데이터를 전송하는 동안만 네트워크 자원을 연결하는 형태이다.
전용 회선 이라는 것이 존재하고 해당 회선을 독점적으로 점유하는 회선 교환 방식과는 대조적인 방법이다.
이러한 패킷 교환에는 2가지 방법으로 구현될 수 있는데,
- 데이터 그램 방식 (Datagram)
- 가상 회선 방식 (Virtual Circuit)
으로 나뉘게 된다.
패킷 (Packet) 과 패킷 교환의 2가지 방식
패킷은 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록이다.
패킷에 가장 작은 데이터 단위인 Message 는 OSI 7 Layer 에 순서에 따라서 각각 Sequence 에 맞는 데이터가 추가되며 하나의 완성된 패킷을 구성하게 된다.
자세한 이야기는 Wireshark 으로 분석하는 OSI 7 Layer 에서 실제 어떤 데이터가 들어오는지 확인할 수 있으니 참고하는 것도 좋을 것 같다.
[Network] Wireshark 으로 분석하는 OSI 7 Layer 의 Basic Header
OSI 7 Layer 지난 시간 간단하게 OSI 7 Layer 에 대해서 알아보았고, 각각 Layer 를 대표하는 것들에 대해서 알아보았다. 이번에는 Wireshark 로 네트워크 통신이 이루어지면 OSI 7 Layer 가 어떻게 동작하는지
wonit.tistory.com
데이터 그램 방식
데이터 그램 방식은 비연결 지향형인 성격을 띄고 있다.
데이터를 전송하기 전에는 논리적 연결이 설정되지 않아서 패킷이 독립적으로 전송되고 패킷을 수신한 라우터는 최적의 경로를 찾아서 패킷을 목적지로 전송하게 된다.
즉, 동일한 패킷을 보내도 서로 다른 경로를 통해서 전송될 수 있다는 소리이다.
그래서 결국 송신 측에서 보낸 순서와 수신 측에 도착한 순서가 다를 수 있다.
가상 회선 방식
가상 회선 방식의 컨셉은 회선 교환 방식을 차용했다.
연결 지향적인 특성을 갖고 있으면서 데이터를 전송하기 전에 논리적으로 목적지 (Destination)와 연결 시킨다.
각 패킷에 가상회선 식별 번호가 존재하고 이 식별 번호를 통해서 전송된 순서대로 도착하게 되는 것이다.
결국 각 패킷은 데이터 그램 방식과 다르게 도착 순서를 보장받을 수 있게 되는 것이다.
<C언어>
arr[0] = &a ←양변에 *를 붙여보세요!
*arr[0] = *&a = a 쉽게 이렇게 생각하면 됩니다. (*과 &은 상쇄)
Switch
switch의 key 값(3) 이 3 이기 때문에 case 3번부터 시작 break 문이 중간에 삽입 되지 않았기
때문에 case 3번 아래로 모두 실행
표준 입출력 헤더 파일 – 언제나 휴일
안녕하세요. 언제나 휴일입니다. 첫 번째 프로그램은 자신의 정보를 콘솔 화면에 출력하는 것으로 할게요. == 다루는 내용 1. main - 프로그램의 진입점 함수 2. #include //표준 입출력 헤더 3. puts 함
ehpub.co.kr
- <stdlib.h>은 C 표준 유틸리티 함수들을 모아놓은 헤더파일이다. https://wooono.tistory.com/301
- 이 헤더파일에는 프로그래밍 시에 범용적으로 사용되는 여러가지 함수들을 모아 놓고 있는데,
- 예를 들면 동적 할당 관련 함수, 난수 생성 함수, 정수의 연산 함수, 검색 및 정렬 함수 등 이다.
- 표준 입출력에 관한 함수는 stdio.h
printf
int printf(const char * format, …); 표준 출력 파일 스트림에 포멧을 지정하여 출력하는 함수
첫 번째 전달할 문자열에 포멧을 지정하면 뒤에 나오는 인자를 차례대로 포멧에 맞게 출력합니다.
나이와 혈액형을 printf 함수로 출력합시다.
정수는 %d, 문자열은 %s로 포멧을 지정합니다.
그리고 printf는 개행을 자동으로 출력하지 않습니다.
맨 끝에 개행 문자(‘\n’)를 추가하세요
비트논리연산자
https://gksid102.tistory.com/90
|, ^, ~, <<, >>, &,
포인터
포인터(Pointer)
메모리의 주소 번지를 저장하는 변수
- 주소 번지란? 해당 데이터가 저장된 메모리의 시작 주소
줄번호 코드 및 주석 3 char *p = "KOREA";: 문자열 포인터 p 에 "KOREA" 가 저장된 주소 번지 저장* C언어에서 문자열 저장 방법1. 배열- ex) char arr[5] = "KOREA"2. 포인터- ex) char *p = "KOREA" 4 printf("%s \n", p);: 문자열 포인터 p 를 출력 5 printf("%s \n", p+3);: 문자열 포인터 p 에 저장된 값에 3 을 더한 후 출력 6 printf("%c \n", *p);: 문자열 포인터 p 가 가리키고 있는 주소 영역에 접근하여 값을 가져와서 출력 7 printf("%c \n", *(p+3));: 문자열 포인터 p 에 저장된 값에 3을 더한 후, 해당 값이 가리키고 있는 주소 영역에 접근하여 값을 가져와서 출력 8 printf("%s \n", *p+2);: *p 의 값(K=75) 을 가져온 후 2를 더하여 출력▶ 75 + 2 = 77 = M* C언어의 문자 연산: C언어에서 문자는 ASCII 코드 규칙에 의해정수로 저장되므로, 덧셈, 뺄셈 등의 연산이 가능하다.
<파이썬>
70. Python 데이터 타입 중 시퀀스(Sequence) 데이터 타입에 해당하며 다양한 데이터 타입들을 주어진 순서에 따라 저장할 수 있으나 저장된 내용을 변경할 수 없는 것은?
리스트 타입 : 가변형 튜플 타입 : 불변형
시퀀스- 리스트 - 순서있고,가변 [1,2,3]
시퀀스- 튜플 - 순서있고,불변 (1,2,3)
세트 - 세트 - 순서없고,중복x {1,2,3}
맵 - 딕셔너리- 순서없고,key-value쌍 {'a':1,'b:2,'c':3}
<C++>
https://jie0025.tistory.com/185
[C++] 생성자와 소멸자, 복사생성자
생성자 C++은 생성자를 이용해 객체 생성과 동시에 멤버변수를 초기화 할수 있다. - 클래스 이름과 동일한 이름 - 반환형 명시 X - 오버로딩 (여러번 정의가능, but 매개변수의 개수나 형태가 달라
jie0025.tistory.com
<UNIX>
명령어
cat: 파일 내용 출력
chmod: 파일이나 디렉토리에 대한 접근권한 변경
fork: 새로운 프로세스 생성
FileDescriptor == File Control Block
파일 디스크립터(File Descriptor)란 리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(file)을 다룰 때 사용하는 개념으로, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값이다. 파일 디스크럽터는 일반적으로 0이 아닌 정수값을 갖는다.
흔히 유닉스 시스템에서 모든 것을 파일이라고 한다. 일반적인 정규파일부터 디렉토리, 소켓, 파이프, 블록 디바이스, 케릭터 디바이스 등 모든 객체들을 파일로 관리한다. 유닉스 시스템에서 프로세스가 이 파일들을 접근할 때 파일 디스크립터라는 개념일 이용한다. 프로세스가 실행 중에 파일을 Open하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다. 그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터(FD)값을 이용해서 파일을 지칭할 수 있다.
보조기억장치에 저장되어 있다가 파일이 개방(open)되면 주기억장치로 이동된다.
프로그램이 프로세스로 메모리에서 실행될 때, 기본적으로 할당되는 파일디스크립터는 표준입력(Standard Input), 표준 출력(Standard Output), 표준에러(Standard Error)이며 이들에게 각각 0, 1, 2라는 정수가 할당된다.
커널의 기능
<서브넷>
FLSM, VLSM https://4lugin.tistory.com/140
https://ninerabbit.tistory.com/33
ip subnet zero https://yjshin.tistory.com/entry/%EC%84%9C%EB%B8%8C%EB%84%B7-IP-Subnet-Zero
<OSI-7Layer>https://youtu.be/WBgprCoRvPc
응용계층- 사용자가 OSI환경에 접근 가능하도록 서비스 제공
표현계층
세션계층- 송수신측 간 관련성 유지 및 대화제어/ 체크점(동기점)을 두어 정보 수신상태 체크
전송계층 - TCP프로토콜(포트로 프로그램과 연결)/ UDP프로토콜(비연결형, 그냥 보냄) https://youtu.be/Fh1GAi63CfA
네트워크 계층 - IP프로토콜 (ARP(논>물) / RARP (물>논)/ ICMP(네트워크,연결된 상태, 정보제어))
데이터링크 - 송수신측 속도 차이 해결을 위한 흐름제어 기능 및 오류 검출과 회복을 위한 오류제어 기능
물리계층 - 전송에 필요한 장치 간 실제 접속
<IPv6> https://physicallaw.tistory.com/100
주소 길이 : 16비트씩 총 8부분 128비트로 구성 (IPv4 32비트)
홉 ( IPv4 TTL)
전체 길이 : 기본 (40byte) + 페이로드 (IPv4 헤더와 페이로드 수 (전체 패킷 바이트수)
유니캐스트, 멀티캐스트, 애니캐스트 주소체계 https://togll.tistory.com/42
인증성,기밀성,데이터 무결성
확장성,융통성,연동성
IPv6 의 각 패킷은 기본 헤더와 페이로드(Payload)로 구성되며, 페이로드는 선택적인 확장 헤더들과 상위 계층의 데이터로 구성한다. 기본 헤더는 40바이트이며, 페이로드는 65,535바이트까지 차지한다
가상기억장치 (Virtual Memroy)
가상기억장치란,
보조기억장치(HDD, SSD 등)에서 필요한 데이터 조각만 쏙쏙 골라와서 주기억장치(RAM)에 올려놓고 사용하는 것이다.
메모리 계층 구조를 보면
(*하드디스크=보조기억장치이다!)
그림에서 보이듯이, 하위계층으로 갈 수록 용량이 크다.
따라서 우리가 설치하는 프로그램들은 하드디스크에 저장되어 있는데,
알다시피 프로그램을 실행하려면 CPU가 프로그램에 대한 데이터를 읽어 연산과정을 거쳐야 한다.
하지만! 그림에서 보듯이 CPU와 하드 디스크는 아~주 멀리 떨어져있다.
연산이 필요할 때 마다 하드디스크까지 가서 데이터를 읽어오는 것은 너무 비효율적이다.
그래서 하드디스크 안의 데이터들을 작게작게 쪼개서 필요한 부분만 데리고 올라와 메인 메모리에 두고 쓰는 것이다.
가상기억장치 구현 기법
대표적으로 페이징, 세그멘테이션이 있다!
둘 다 "하드디스크의 데이터를 쪼개서 쓴다"는 기본적 원리는 같으나,
데이터를 어떤 크기로 쪼갤 것인지에 차이를 둔다.
Paging (페이징)
같은 크기로 와랄라 나눠버리기!
페이징 기법은
주기억장치의 데이터 공간, 보조기억장치의 데이터를 모두 동일한 크기로 나눈다!
(이 때, 그 크기는 대체로 1~4KB이다)
그 후, 데이터 접근이 일어날 때, 보조기억장치에서 필요한 페이지들을 꺼내다가 주기억장치의 영역(=페이지 프레임)에 적재시킨다.
페이징 기법의 특징으로는,
- 외부 단편화는 발생하지 않으나 내부 단편화는 발생할 수 있다.
- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블(PMT)이 필요하다.
- PMT 사용으로 시간/공간 Cost가 증가하고, 처리 속도가 감소된다.
외부 단편화? 내부 단편화?
- 외부 단편화
분할된 영역(프레임)의 크기가 할당된 프로그램의 크기(페이지)보다 작아서 프로그램이 들어갈 수가 없는 경우- 내부 단편화
분할된 영역(프레임)의 크기가 할당된 프로그램의 크기(페이지)보다 커서, 프레임 내부에 공간이 남아도는 경우
페이징에서 내부 단편화가 일어날 수 있는 이유?
페이지 크기가 4KB, 데이터의 크기가 10KB라고 가정해보자.
데이터를 페이지 크기대로 쪼개면 4KB / 4KB / 2KB 의 페이지로 나눠질 것! 이 때, 2KB짜리 페이지에서 내부 단편화가 일어난다.
Segmentation
논리적인 단위로 프로그램을 나누는 기법.
보조기억장치의 프로그램을 코드, 데이터, 스택 영역 등의 논리적 단위로 나눈 조각들을 세그먼트라고 한다.
- 내부 단편화는 발생하지 않으나, 외부 단편화는 발생할 수 있다.
- 각 세그먼트가 상주하는 위치 정보를 가지고 있는 세그먼트 맵 테이블 (SMT)가 필요하다.
- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범해서는 안된다. 이를 위해 기억장치 보호키가 필요하다.
<process와 thread>
프로세스란?
https://jihyeong-ji99hy99.tistory.com/25
https://developyo.tistory.com/198
프로세스(process)란 실행 중인 프로그램을 의미한다. 고로 레지스터, 스택, 포인터, 실행 중인 프로그램, 데이터 등으로 구성된 집합체이다. 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있다.
조금 이해하기 어려울 수 있지만, 하드디스크에 프로그램을 실행하면, 실행을 위한 메모리 할당이 이루어지고, 할당된 메모리 공간으로 바이너리 코드가 올라가게 되는데 이것을 "프로세스"라고 부른다.
[운영체제] 프로세스란? (+ 문맥전환이란?)
프로세스란? 프로세스(process)란 실행 중인 프로그램을 의미한다. 고로 레지스터, 스택, 포인터, 실행 중인 프로그램, 데이터 등으로 구성된 집합체이다. 프로세스 내부에는 최소 하나의 스레드(th
jihyeong-ji99hy99.tistory.com
스레드란?
스레드(thread)란 프로세스 내부의 작업의 흐름, 단위를 의미하는 것으로, 프로세스에서 실행의 개념만을 분리한 개념이다. 스레드가 여러개 존재하는 것을 멀티스레드(multithread)라고 하는데, 멀티스레드에서 각 스레드끼리는 프로세스의 일정 메모리 영역을 공유한다.
■프로세스와 스레드 비교■
프로세스 | 스레드 |
System Call | Library Call |
call 종료 시까지 정체 자원 blocking | 요청 스레드만 blocking |
자원 할당을 위한 기본 구분 단위 | CPU를 이용하는 기본 작업 |
Context Switching으로 인한 부하 발생 프로세스 자원 할당 시 부하 발생 |
프로세스보다 상대적으로 부하 발생이 적음 |
멀티 스레드에서 살짝 언급했다시피 일정 메모리 영역을 공유하는 스레드가 동일한 프로세스 내부의 스레드 간 문맥 전환(context switching) 할 때, 프로세스끼리의 문맥 전환(context switching) 할 때보다 빠르다. 상대적으로 스위치 해야 할 메모리 영역이 적기 때문이다.
// 문맥전환에 대한 설명은 아래에서 더 자세하게 다루겠다.
지금부터 프로세스가 진행되는 과정을 알아볼 것이다. 앞서 프로세스가 실행하기 위해 메모리 할당이 이루어진다고 언급했다. 이렇게 프로세스가 CPU를 점유하는 과정을 "프로세스 상태전이"라고 부른다.
프로세스 실행 결정 및 필요한 자원을 할당하는 과정, 프로세스 상태 전이(Process State Transition)를 위해 O/S는 작업 스케줄러(Job Schedulaer), 프로세스 스케줄러(Process Scheduler) 두 종류의 CPU 스케줄러를 사용한다.
■프로세스 상태 변화 ( 프로세스 상태 전이도)■
① Admit (생성->준비)
: 프로세스가 실행되면 모든 프로세스는 OS 커널에 존재하는 준비 큐(Ready Queue)에 들어간다.
② Dispatch (준비->실행)
: 준비 큐에 있는 프로세스들 중에서 프로세스 스케줄러를 이용하여 OS가 실행상태로 가야 할 하나의 프로세스를 선택하여 CPU를 할당한다.
③ Timer Run out (실행->준비)
: CPU를 할당받은 프로세스가 주어진 사용시간을 다 쓴 경우
: CPU 스케줄링에 따라 우선순위가 높은 프로세스에게 CPU를 양보할 경우
④ Blocked (실행->Blocked(sleep) 대기 )
: CPU를 할당 받은 프로세스가 입출력(I/O) 이벤트를 요구하거나 CPU 이외의 서비스를 요구할 때 발생한다.
⑤ Wake up (Blocked(sleep) 대기 ->준비)
: 입출력(I/O) 이벤트나 그 외 서비스 처리가 끝났을 때 발생한다.
⑥ Release (실행->종료)
: 프로세스 종료
Running : CPU를 잡고 인스트럭션(instruction)을 수행중인 상태
Ready : CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하는 상태)
Blocked (wait, sleep) :
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- process 자신이 요청한 event(ex: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
ex) 디스크에서 file을 읽어와야 하는 경우
Suspended (stopped) :
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out 된다
ex) 사용자가 프로그램을 일시 정지 시킨 경우,
메모리에 너무 많은 프로세스가 올라와 있을 때(Medium-term Scheduler에 의해)
New : 프로세스가 생성 중인 상태 (보통 프로세스의 상태로 포함되지 않음)
Terminated : 수행이 끝난 상태 (보통 프로세스의 상태로 포함되지 않음)
문맥전환(Context Switching)이란?
: CPU가 이전 상태의 프로세스를 PCB에 보관하고, 또 다른 프로세스를 PCB에서 읽어 레지스터에 적재하는 과정.
**PCB(Process Control Block)란?
: 운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장 장소.
프로세스 생성 시 만들어지며, 주기억장치에 유지된다.
PCB에서 유지되는 정보
예를 들어, CPU에 우선순위가 높은 프로세스를 처리해달라고 요청이 왔을 경우, 기존에 작업 중이던 프로세스를 PCB에 보관해두었다가 급한 프로세스 처리가 끝난 후에 이전에 중단된 상태를 그대로 복원하여 중단된 이후 상태부터 작업을 진행하는 것이다. 해당 과정에서 Context Switching 개념을 이해할 수 있을 것이다.
그 외에 문맥교환은 인터럽트가 발생했을 때, 실행 중인 프로세스가 허가받은 시간을 모두 소모한 경우(Time Quantum), I/O 입출력을 위해 대기해야 하는 경우에 발생한다.
<사용자 수준 스레드와 커널에서 지원되는 스레드>
https://helloinyong.tistory.com/293
[2020.09.16] (운영체제) 사용자 수준 스레드와 커널 수준 스레드의 차이
운영체제 공부 중에 사용자 수준 스레드와 커널 수준의 스레드에 대해 개념이 이해가 되지 않았다. 다른 블로그 글을 찾아봐도 뭔가 애매모호하게 설명하고 말아 버린 느낌으로 받아들여져서
helloinyong.tistory.com
<프로세스 적재 정책>
https://lansaid.tistory.com/268
[운영체제] 120525 05 프로세스 적재 정책
* 스레싱(Thrashing) 1. 페이지 교환이 계속 일어나는 현상 1) 어떤 프로세스가 프로세스 수행에 보내는 시간보다 페이지 교환에 보내는 시간이 더 크면 '스레싱을 하고 있다' 고 말함 2. 스레싱 발생
lansaid.tistory.com
스레싱: 페이지 교환이 계속일어나는 현상
프로세스 수행에 보내는 시간보다 페이지 교환에 보내는 시간이 더크면 발생
방지하기 위해 각 프로세스가 필요로 하는 프레임을 제공할 수 있어야 한다.
<스케줄링 알고리즘> (평균실행시간, 평균대기시간, 평균 반환시간)
FCFS (FIFO)
SJF(단기작업우선) 가장적은 평균대기시간
HRN (실행시간 긴 프로세스 불리한 SJF 보완) 우선순위 계싼식 = 대기시간+서비스시간/서비스시간 대서서
<교착상태>
https://cocoon1787.tistory.com/858
[OS] 교착상태(Deadlock, 데드락)의 정의, 발생 조건, 해결 방법
🚀 안녕하세요. 이번 포스팅은 NSC 전공시험이나 신입 기술면접에서도 자주 등장하는 주제인 교착상태(Deadlock)에 대해 한번 알아보고자 합니다. 🤔 교착상태란? 교착상태란 두 개 이상의 프로세
cocoon1787.tistory.com
-상호배제 한번에 한개
-점유 대기
-비선점
-순환대기
<>
-예방
-회피 (은행원 알고리즘(가용자원 적은것부터),
자원할당그래프알고리즘(예약간선 설정,사이클 형성되지 않았을 경우 자원할당)
-탐지 (오버헤드발생)
-회복 ( 사용자처리(강제종료), 시스템처리(프로세스중지,자원선점))
<리눅스 chmod 명령어 사용법> https://recipes4dev.tistory.com/175
<JAVA>
static - 클래스 내에서 객체 생성 없이 사용할 수 있는 메소드
^는 XOR연산으로 0 1 or 1 0 일 때만 1입니다.
'공부 > 정보처리기사' 카테고리의 다른 글
2023 정보처리기사 -소프트웨어 설계 (0) | 2023.02.12 |
---|---|
2023 정보처리기사 - 소프트웨어 개발 (2과목) (0) | 2023.02.06 |
2023 정보처리기사 - 데이터베이스 구축(3과목) (0) | 2023.02.06 |
2023 정보처리기사 -정보시스템 구축관리(5과목) (0) | 2023.02.04 |