꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

분류 전체보기 199

쉘 (shell) 사용법 - 리다이렉션(redirection)과 파이프(pipe)

리눅스 리다이렉션(redirection)과 파이프(pipe)과 관련해서 알아보겠습니다. Standard Stream (표준 입출력) command로 실행되는 프로세스는 세 가지 스트림을 가지고 있습니다. 1. 표준 입력 스트림 (Standard Input Stream) - stdin 2. 표준 입력 스트림 (Satandard Output Stream) - stdout 3. 오류 출력 스트림 (Standard Error Stream) - stderr 모든 스트림은 일반적인 plain text로 console에 출력하도록 되어있습니다. Redirection (리다이렉션) 표준 스트림 흐름을 바꿔줄 수 있습니다. 주로 명령어 표준 출력을 화면이 아닌 파일에 쓸 때 사용합니다. ex) ls > files.txt..

쉘 (shell) 명령어

쉘이란 사용자와 하드웨어 또는 운영체제간의 인터페이스를 말합니다. 사용자의 명령을 해석해서 커널에 명령을 요청해주는 역할을 하며, 관련된 시스템콜을 사용해서 프로그래밍이 작성되어 있습니다. 쉘 종류 Bourne-Again Shell (bash) : GNU 프로젝트의 일환으로 개발됐습니다. 리눅스에서 거의 default로 돼있습니다. Bourne shell (sh) C shell (csh) Korn Shell (ksh) : 유닉스에서 가장 많이 사용합니다. 리눅스 기본 명령어 정리 다중 사용자 관련 명령어에 대해서 알아보겠습니다. whoami 사용자가 누구인지 알려주는 명령어입니다. passwd 로그인한 사용자 ID의 암호를 변경합니다. useradd 사용자 기본 설정을 자동으로 하지 않습니다. addus..

네트워크 용어 정리 (4)

전송계층 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 해서 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경쓰지 않도록 합니다. 데이터가 중복되거나 누락되지 않고 오류없이 순서에 맞게 전송되도록 관리합니다. 연결형 데이터를 교환하기 전에 연결을 맺고 데이터를 교환하는 동안 계속 연결을 관리하는 프로토콜의 한 형태입니다. 비연결형 연결에 대한 초기화 과정이 없는 통신입니다. TCP (Transmission Control Protocol) 전송 계층의 프로토콜은 연결형 통신 방식이며 신뢰할 수 있는 데이터 전송을 보장합니다. 대역폭 정해진 시간동안 전솔될 수 있는 데이터의 양을 말합니다. UDP (User Datagram Protocol) 정보를 서로 주고받을 때 보내는 쪽에서 일방적으로 데이터를..

네트워크 2021.04.28

유닉스/리눅스 기본 구성

리눅스와 파일 리눅스는 모든 것은 파일이라는 철학을 따릅니다. 모든 인터렉션은 파일을 읽고, 쓰는 것처럼 이루어져 있습니다. 마우스, 키보드와 같은 모든 디바이스 관련된 기술도 파일과 같이 다루어집니다. 또한 리눅스는 전역 네임스페이스를 제공합니다. 파일 시스템은 inode 고유값과 자료구조에 의해 주요 정보를 관리합니다. 리눅스와 프로세스 리눅스 실행 파일 포멧을 ELE(Excutable and Linkable Format)이라 합니다. 콜스택, 코드(텍스트), 데이터 및 BSS 섹션 등을 갖습니다. 또한 다양한 시스템 리소스를 처리할 수 있습니다. 시스템 콜 호출을 통해서 리소스 처리를 할 수 있습니다. 타이머, 시그널, 파일, 네트워크, 디바이스, IPC 기법 등을 관리할 수 있습니다. 리눅스는 가..

리눅스의 배경

리눅스는 리누스 토발즈가 개발했습니다. 대학에 있는 UNIX 컴퓨터를 집에서 쓰고 싶다는 마음에 운영체제를 만들었습니다. 컴퓨터의 응답 시스템을 최소화해서 다중 사용자, 다중 작업을 지원하는 즉, 시분할 시스템과 멀티 태스킹을 지원하는 운영체제를 개발하였습니다. GNU프로젝트 GNU란 Gnu is Not Unix의 줄임말입니다. 유닉스 운영체제를 여러 회사에서 각자 개발했으며, 소스를 공유하지 않았습니다. 이때 리차드 스톨만이라는 사람이 이러한 문화에 반발해서 초기 컴퓨터 개발 공동체의 상호협력적인 문화를 주장하며 1985년도에 GNU 선언문을 발표했습니다. 그러면서 GNU 프로젝트를 시작하게 되고 이 프로젝트를 지원하기 위해서 자유 소프트웨어 재단(FSF)를 설립하고 GNU 공개 라이선스(GPL)라는 ..

리눅스를 배워야 하는 이유

리눅스는 서버에 많이 사용되는 운영체제입니다. client에서 server로 html 파일을 요청하고 server에서 html 파일을 전달하면서 웹 브라우저에서 화면을 볼 수 있게 됩니다. 이러한 server에서는 주로 리눅스를 사용합니다. 또한 프로그래밍을 할 때에도 많이 사용이 됩니다. c언어의 경우 컴파일러를 통해서 컴퓨터가 이해할 수 있는 기계어로 바꿔주어야 됩니다. 이때 문제점이 컴파일러가 코드를 변환하는 과정에서 많은 시간이 소요됩니다. window와 mac os의 경우에는 사용자 중심이다 보니 여러가지 다양한 프로그램을 설치해야 합니다. 그에 반해 리눅스의 경우 kernel, shell, system 기본 프로그램 정도만 설치하고 컴파일을 돌리기 때문에 시간 소요가 짧습니다. 요즘에는 클라우..

가상 머신(Virtual Machine)

하나의 하드웨어에 다수의 운영체제를 설치하고, 개별 컴퓨터처럼 동작하도록 하는 프로그램입니다. Virtual Machine Type1 (native / bare metal) 하이퍼 바이저(VMM)는 운영체제와 응용 프로그램을 물리적 하드웨어에서 분리하는 프로세스입니다. 하이퍼바이저 또는 버추얼 머신 모니터라고 하는 소프트웨어가 Hardware에서 직접 구동합니다. Virtual Machine Type2 하이퍼바이저 또는 버추얼 머신 모니터라고 하는 소프트웨어가 Host OS상위에 설치됩니다. 전가상화 각 가상머신이 하이퍼바이저를 통해서 하드웨어와 통신합니다. 하이퍼바이저가 마치 하드웨어인 것처럼 동작하기 때문에 가상머신의 OS는 자신이 가상 머신인 상태인지 모릅니다. VMM이 통역사 역할을 하게 됩니다...

운영체제 (OS) 2021.04.25

부팅의 이해

Boot 컴퓨터를 켜서 동작시키는 절차입니다. Boot 프로그램은 운영체제 커널을 Storage에서 특정 주소의 물리 메모리로 복사하고 커널의 처음 실행위치로 PC를 가져다 놓는 프로그램입니다. 컴퓨터를 키면 BIOS가 특정 Storage를 읽고 bootstrap loader를 메모리에 올리고 실행합니다. bootstrap loader 프로그램이 있는 곳을 찾아서 실행시킵니다. bootstrap loader가 실행되면 파티션 table을 통해서 메인 파티션을 파악합니다. 메인 파이션에서 부트 섹터에 접근해서 부트 코드를 로드합니다. 그 후 커널 이미지를 읽어와서 운영체제를 실행합니다.

운영체제 (OS) 2021.04.24

파일 시스템의 이해

파일시스템 운영체제가 저장매체에 파일을 쓰기 위한 자료구조 또는 알고리즘입니다. 파일 시스템이 만들어진 이유 처음에는 0과 1의 데이터를 저장하는 저장매체였습니다. 처음에 비트로 관리를 했었는데 오버헤드가 컸습니다. 이에 블록 단위로 관리하기 시작하였고 블록마다 고유 번호를 부여해서 관리를 하고 있습니다. 하지만 이 과정에서도 일반 사용자에게 블록 고유 번호를 관리하기에는 어려움이 있었습니다. 추상적 객체가 필요했는데 이를 파일이라고 합니다. 사용자는 파일 단위로 관리를 하게 되고 각 파일에는 블록 단위로 관리됩니다. 가능한 연속적인 공간에 파일을 저장하는 것이 좋습니다. 여기에 문제가 있었는데 파일의 크기가 변한다는 것이었습니다. 외부 단편화 문제가 발생하면서 불연속 공간에 파일 저장 기능 지원이 필요..

운영체제 (OS) 2021.04.24

가상 메모리 - 세그멘테이션

세그멘테이션 기법 가상 메모리를 서로 크기가 다른 논리적인 단위인 세그먼트(Segment)로 분할합니다. 페이징 기법의 경우 가상 메모리를 같은 크기의 블록으로 분할한다는 점에서 다릅니다. CS(Code Segment), DS(Data Segment), SS(Stack Segment), ES(Extra Segment)로 나눕니다. 세그먼트의 주소는 v = (s, d)로 구할 수 있습니다. s는 세그먼트 번호, d는 블록 내 세그먼트 변위입니다. 페이징 시스템과 유사합니다.

운영체제 (OS) 2021.04.23