전체 글

전체 글

    VM과 컨테이너

    근본적인 차이점은, VM은 커널을 포함해 운영체제 전체의 복사본을 실행하는 반면 컨테이너는 호스트 컴퓨터의 커널을 공유한다는 점이다. 1. 컴퓨터 부팅 과정 BIOS 라고 하는 초기 프로그램을 실행한다. BIOS는 가용 메모리양을 파악하고, 네트워크 인터페이스들을 식별하고, 그 밖에 디스플레이나 키보드, 저장 장치 같은 여러 장치들을 탐지한다. 요즘은 이런 기능의 상당 부분을 UEFI가 담당하고 있다. 하드웨어 탐지 완료 후, 시스템은 부트로더를 실행한다. 부트로더는 운영체제의 커널 코드를 메모리에 적재해서 실행한다. 커널 코드는 응용 프로그램보다 높은 수준의 권한으로 실행된다. 커널이 메모리나 네트워크 인터페이스 등에 접근할 수 있는 것은 그런 권한 수준 덕분이다. 커널 코드는 CPU에서 기계어 명령의..

    [Linux] 리눅스 능력 (getcaps)

    특정 프로세스에 주어진 능력들은 getpcaps 명령으로 볼 수 있다. 보통의 경우 비루트 사용자가 실행한 프로세스에는 아무런 능력도 배정되지 않는다. $ snchoi@snchoi:~$ ps PID TTY TIME CMD 1905 pts/0 00:00:00 bash 3577 pts/0 00:00:00 ps $ snchoi@snchoi:~$ getpcaps 1905 1905: = 최소 권한 원칙에 따라, 프로세스나 파일에 능력을 부여할 때는 작업에 꼭 필요한 능력들만 부여하는 것이 바람직하다. 컨테이너 실행 시 컨테이너에 부여할 능력들을 설정할 수 있다.

    [Linux] 리눅스 setuid, setgid

    보통의 경우 사용자가 파일을 실행하면 해당 프로세스는 그 사용자의 ID로 실행된다. 그러나 파일에 setuid 비트를 설정해 두면 프로세스는 파일 소유자의 ID로 실행된다. $ snchoi@snchoi:~$ ls -l `which sleep` -rwxr-xr-x 1 root root 26984 Feb 7 2022 /usr/bin/sleep $ snchoi@snchoi:~$ cp /usr/bin/sleep ./mysleep $ snchoi@snchoi:~$ ls -l ./mysleep -rwxr-xr-x 1 snchoi snchoi 26984 Jul 4 02:11 ./mysleep 출력에서 보듯이 복사본 mysleep의 소유자는 snchoi 라는 사용자이다. # 복사본을 루트계정으로 실행 $ snchoi@..

    리눅스의 컨테이너 격리 (cgroups, namespace)

    컨테이너는 VM과 달리 Host의 OS를 공유한다. 1. Cgroups(control groups) 격리 cpu, memory, network 등 프로세스 그룹의 시스템 리소스 사용량을 관리한다. 어떤 리소스 사용량이 많다면 그 애플리케이션을 cgroup에 넣어서 cpu와 memory 등의 사용 제한을 가능하게 한다. 보통 /sys/fs/crouop 에서 여러 종류의 제어 그룹 위계구조들을 볼 수 있다. $ snchoi@snchoi:/$ ls sys/fs/cgroup/ cgroup.controllers cgroup.threads dev-mqueue.mount io.stat sys-fs-fuse-connections.mount cgroup.max.depth cpu.pressure init.scope mem..

    [python] 프로그래머스 > JadenCase 문자열 만들기

    https://school.programmers.co.kr/learn/courses/30/lessons/12951 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 - 실패 def solution(s): answer = '' for i in s.split(): if i[0].isalpha(): answer += i[0].upper()+i[1:].lower() else: answer += i.lower() answer += ' ' return answer[:-1] 다른사람풀이 참조 def solution(s): s = s.split(" ") for ..

    [python] 프로그래머스 > 최댓값과 최솟값

    https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(s): temp = [int(i) for i in s.split()] return '{minv} {maxv}'.format(minv=min(temp),maxv=max(temp)) python에서 포맷팅 하는 방법을 리마인드 하였다.

    [python] 프로그래머스 > k진수에서 소수 개수 구하기

    https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 - 시간초과 def is_prime_number(x): # 2부터 (x - 1)까지의 모든 수를 확인하며 if x < 2: return False for i in range(2, x): # x가 해당 수로 나누어떨어진다면 if x % i == 0: return False # 소수가 아님 return True # 소수임 def solution(n, k): answer = 0 decimal..

    [python] 프로그래머스 > 두 큐 합 같게 만들기

    https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 - 실패(60점) from collections import deque def solution(queue1, queue2): answer = 0 dq1 = deque(queue1) dq2 = deque(queue2) targetValue = (sum(dq1)+sum(dq2))//2 for i in range(len(dq1)+len(dq2)): if sum(dq1) < targetVal..