Linux io는 파일 작업을 의미합니다. Linux에서 파일은 일련의 바이너리 스트림입니다. 정보 교환 중에 우리는 모두 이러한 스트림에서 데이터 전송 및 수신 작업을 수행합니다. ; Linux는 가상 메모리 메커니즘을 사용하므로 IO 작업을 완료하려면 시스템 호출을 통해 커널을 요청해야 합니다.
이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
리눅스 IO는 무엇을 의미하나요?
우리 모두는 Linux 세계에서는 모든 것이 파일이라는 것을 알고 있습니다.
그리고 파일은 소켓, FIFO, 파이프 또는 터미널에 관계없이 일련의 이진 스트림입니다. 우리에게는 모든 것이 스트림입니다.
정보 교환 과정에서 우리 모두는 이러한 스트림에서 데이터 전송 및 수신 작업을 수행하는데, 이를 I/O 작업이라고 합니다.
스트림에서 데이터를 읽고, 시스템이 데이터 읽기, 쓰기를 호출하고, 시스템이 쓰기를 호출합니다.
일반적으로 사용자 프로세스의 전체 IO는 두 단계로 나뉩니다.
디스크 IO:
네트워크 IO:
운영 체제와 드라이버는 커널 공간에서 실행됩니다. 사용자 공간에서 실행되는 애플리케이션은 포인터를 사용하여 데이터를 전송할 수 없습니다. Linux에서 사용하는 가상 메모리 메커니즘은 IO 작업을 완료하기 위해 시스템 호출을 통해 커널을 요청해야 하기 때문입니다.
IO에는 메모리 IO, 네트워크 IO, 디스크 IO의 세 가지 유형이 있습니다. 일반적으로 IO에 관해 이야기할 때는 후자의 두 가지를 언급합니다!
IO 모델이 필요한 이유
동기를 사용하여 통신하면 모든 작업이 스레드에서 순차적으로 실행됩니다. 이것의 단점은 다음과 같습니다.
- 동기 통신 작업은 다른 작업을 차단하기 때문입니다. 동일한 스레드에서는 이 작업이 완료된 후에야 후속 작업이 완료될 수 있으므로 동기 차단 + 멀티스레딩(각 소켓이 해당 스레드를 생성)하지만 시스템의 스레드 수에는 제한이 있으며 스레드 스위칭은 동시에 시간 낭비이므로 소켓이 적은 상황에 적합합니다.
IO 모델이 나타나야 합니다.
Linux IO 모델
Linux IO 모델을 설명하기 전에 먼저 Linux 시스템 데이터를 읽는 프로세스를 이해해 보겠습니다.
index.html 파일을 요청하는 사용자를 예로 들어
기본 개념
사용자 공간 및 커널 공간
운영 체제의 핵심은 커널입니다. 커널은 일반 응용 프로그램과 독립적이며 보호된 메모리 공간에 액세스할 수 있고 기본 하드웨어 장치에 액세스할 수 있는 모든 권한도 갖습니다.
- 커널의 보안을 보장하기 위해 사용자 프로세스는 커널을 직접 작동할 수 없습니다. 운영체제는 가상 공간을 두 부분으로 나누어 하나는 커널 공간이고 다른 하나는 사용자 공간입니다.
프로세스 전환
프로세스 실행을 제어하려면 커널에는 CPU에서 실행 중인 프로세스를 일시 중지하고 이전에 일시 중지된 프로세스의 실행을 재개할 수 있는 기능이 있어야 합니다.
이 동작을 프로세스 전환이라고 합니다.
그러므로 모든 프로세스는 운영 체제 커널의 지원을 받아 실행되며 커널과 밀접한 관련이 있다고 말할 수 있습니다.
프로세스 차단
시스템 리소스 요청 실패, 특정 작업 완료 대기, 새 데이터가 아직 도착하지 않았거나 수행할 새 작업 없음 등 특정 예상 이벤트가 발생하지 않아 실행 프로세스 ., 시스템에 의해 차단됩니다. 차단 프리미티브(Block)를 자동으로 실행하여 실행 상태에서 차단 상태로 변경됩니다.
프로세스 차단은 프로세스 자체의 활성 동작이므로 실행 상태(CPU 획득)에 있는 프로세스만 차단 상태로 전환할 수 있음을 알 수 있습니다.
프로세스가 차단 상태에 들어가면 CPU 리소스를 점유하지 않습니다.
파일 설명자
파일 설명자(File Descriptor)는 컴퓨터 과학의 용어로 파일에 대한 참조를 표현하는 데 사용되는 추상적인 개념입니다.
파일 설명자는 공식적으로 음수가 아닌 정수입니다. 실제로는 각 프로세스에 대해 커널이 유지 관리하는 프로세스에서 열린 파일의 레코드 테이블을 가리키는 인덱스 값입니다.
- 프로그램이 기존 파일을 열거나 새 파일을 만들면 커널은 파일 설명자를 프로세스에 반환합니다.
캐시된 IO
대부분의 파일 시스템에 대한 기본 IO 작업은 캐시된 IO입니다.
읽고 쓰기 과정은 다음과 같습니다.
읽기 작업: 운영 체제는 커널 버퍼에 필요한 데이터가 있는지 확인합니다. 캐시된 경우 캐시에서 직접 반환되며, 그렇지 않으면 디스크, 네트워크 카드 등에서 읽혀집니다. ., 운영 체제에 캐시됨 캐시에서
쓰기 작업: 데이터를 사용자 공간에서 커널 공간의 캐시로 복사합니다. 이때, 사용자 프로그램에 대한 쓰기 작업은 완료된 상태이며, 디스크, 네트워크 카드 등에 언제 쓸 것인지는 sync 동기화 명령이 명시적으로 호출되지 않는 한 운영체제에 의해 결정됩니다.
커널 공간 캐시에 필요한 데이터가 없다고 가정하면 사용자 프로세스는 두 단계로 디스크나 네트워크에서 데이터를 읽습니다.
1단계: 커널 프로그램은 디스크나 네트워크에서 데이터를 읽습니다. 카드 등을 커널 공간 캐시 영역으로 ;
2단계: 사용자 프로그램이 커널 공간 캐시의 데이터를 사용자 공간으로 복사합니다.
캐시된 IO의 단점:
데이터는 전송 프로세스 중에 애플리케이션 주소 공간과 커널 공간에 여러 번 복사되어야 합니다. 이러한 데이터 복사 작업으로 인해 발생하는 CPU 및 메모리 오버헤드가 매우 큽니다.
동기 차단
사용자 공간 응용 프로그램은 시스템 호출을 실행하여 데이터가 준비될 때까지 응용 프로그램을 차단하고 아무 작업도 하지 않게 하며, 데이터는 커널에서 사용자 프로세스로 복사되고 마지막으로 프로세스가 데이터를 처리합니다. 데이터를 기다리는 단계와 데이터를 처리하는 단계에서는 전체 프로세스가 차단되어 다른 네트워크 IO를 처리할 수 없습니다.
- 호출 애플리케이션은 더 이상 CPU를 소비하지 않고 단순히 응답을 기다리는 상태이므로 처리 측면에서 매우 효율적입니다.
이것은 또한 가장 간단한 IO 모델이기도 하며 일반적으로 FD가 적고 준비가 빠른 경우 사용하는 데 문제가 없습니다.
동기식 비차단
비차단 시스템 호출이 호출된 후 프로세스는 차단되지 않으며, 데이터가 준비되지 않은 경우 커널은 즉시 프로세스로 복귀합니다. 시간.
프로세스가 반환된 후 시스템 호출을 하기 전에 다른 작업을 수행할 수 있습니다.
위 과정을 반복하면서 한 주기로 시스템 콜을 하게 됩니다. 이 프로세스를 흔히 폴링이라고 합니다.
폴링은 데이터가 준비될 때까지 커널 데이터를 확인한 다음 데이터 처리를 위해 프로세스에 데이터를 복사합니다.
데이터를 복사하는 전체 과정 동안 해당 프로세스가 여전히 차단된다는 점에 유의해야 합니다.
이런 식으로 프로그래밍에서 소켓에
O_NONBLOCK
을 설정할 수 있습니다.O_NONBLOCK
即可。
IO多路复用
IO多路复用,这是一种进程预先告知内核的能力,让内核发现进程指定的一个或多个IO条件就绪了,就通知进程。
使得一个进程能在一连串的事件上等待。
IO复用的实现方式目前主要有Select、Poll和Epoll。
伪代码描述IO多路复用:
while(status == OK) { // 不断轮询 ready_fd_list = io_wait(fd_list); //内核缓冲区是否有准备好的数据 for(fd in ready_fd_list) { data = read(fd) // 有准备好的数据读取到用户缓冲区 process(data) }}
信号驱动
首先我们允许Socket进行信号驱动IO,并安装一个信号处理函数,进程继续运行并不阻塞。
当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。
流程如下:
开启套接字信号驱动IO功能
系统调用Sigaction执行信号处理函数(非阻塞,立刻返回)
数据就绪,生成Sigio信号,通过信号回调通知应用来读取数据
此种IO方式存在的一个很大的问题:Linux中信号队列是有限制的,如果超过这个数字问题就无法读取数据
异步非阻塞
异步IO流程如下所示:
当用户线程调用了
aio_read
-
IO 멀티플렉싱
IO 멀티플렉싱은 프로세스가 커널에 미리 알리는 기능으로, 프로세스에서 지정한 하나 이상의 IO 조건이 준비되었음을 커널이 발견할 수 있습니다. , 프로세스를 알립니다. 일련의 이벤트를 기다리는 프로세스를 활성화합니다.
- 현재 IO 재사용의 주요 구현 방법에는 Select, Poll 및 Epoll이 있습니다.

의사 코드는 IO 다중화를 설명합니다.rrreee
신호 드라이버🎜먼저 소켓이 신호 기반 IO를 수행하고 신호 처리 기능을 설치하도록 허용합니다. 프로세스는 차단 없이 계속 실행됩니다. 🎜🎜데이터가 준비되면 프로세스는 SIGIO 신호를 수신하고 신호 처리 함수에서 I/O 작업 함수를 호출하여 데이터를 처리할 수 있습니다. 🎜🎜🎜프로세스는 다음과 같습니다. 🎜🎜🎜🎜🎜소켓 신호 드라이버 IO 기능 활성화 🎜🎜🎜🎜시스템은 Sigaction을 호출하여 신호 처리 기능(비차단, 즉시 반환)을 실행합니다. 🎜🎜🎜🎜데이터는 다음과 같습니다. 준비, Sigio 신호 생성 및 신호 전달 콜백 알림 애플리케이션은 데이터를 읽는 데 사용됩니다🎜🎜🎜🎜이 IO 방법에는 큰 문제가 있습니다. Linux의 신호 대기열이 이 숫자를 초과하면 데이터가 제한됩니다. 읽을 수 없습니다🎜🎜
h
비동기 비차단🎜🎜🎜비동기 IO 프로세스는 다음과 같습니다. 🎜🎜🎜🎜🎜사용자 스레드가
aio_read
시스템을 호출할 때 호출하면 즉시 다른 작업을 시작할 수 있으며 사용자 스레드는 차단되지 않습니다. 🎜🎜🎜🎜커널은 IO의 첫 번째 단계인 데이터 준비를 시작합니다. 커널은 데이터가 준비될 때까지 기다리면 커널 버퍼의 데이터를 사용자 버퍼로 복사합니다🎜🎜🎜🎜커널은 사용자 스레드에 신호를 보내거나 사용자 스레드가 등록한 콜백 인터페이스를 콜백하여 사용자 스레드에게 읽기 작업이 완료되었음을 알려줍니다🎜🎜🎜🎜사용자 스레드는 사용자 버퍼의 데이터를 읽고 후속 비즈니스 작업을 완료합니다🎜🎜🎜🎜🎜동기 IO에 비해 비동기 IO는 순차적으로 실행되지 않습니다. 🎜
사용자 프로세스가 aio_read
시스템 호출을 수행한 후에는 커널 데이터가 준비되었는지 여부에 관계없이 사용자 프로세스로 직접 반환되고 사용자 모드 프로세스는 다른 작업을 수행할 수 있습니다. . aio_read
系统调用之后,无论内核数据是否准备好,都会直接返回给用户进程,然后用户态进程可以去做别的事情。
等到数据准备好了,内核直接复制数据给进程,然后从内核向进程发送通知。
对比信号驱动IO,异步IO的主要区别在于:
- 信号驱动由内核告诉我们何时可以开始一个IO操作(数据在内核缓冲区中),而异步IO则由内核通知IO操作何时已经完成(数据已经在用户空间中)。
异步IO又叫做事件驱动IO,在Unix中,为异步方式访问文件定义了一套库函数,定义了AIO的一系列接口。
- 使用
aio_read
或者aio_write
发起异步IO操作,使用aio_error
데이터가 준비되면 커널은 데이터를 프로세스에 직접 복사한 다음 커널에서 프로세스로 알림을 보냅니다.
신호 구동 IO와 비교할 때 비동기식 IO의 주요 차이점은 다음과 같습니다.
- 신호 드라이버는 커널에서 IO 작업을 시작할 수 있는 시기를 알려줍니다(데이터는 커널 버퍼), 비동기 IO는 IO 작업이 완료되면 커널에 알립니다(데이터가 이미 사용자 공간에 있음).
비동기 IO는 이벤트 중심 IO라고도 합니다. Unix에서는 파일에 대한 비동기 액세스를 위해 일련의 라이브러리 함수가 정의되고 일련의 AIO 인터페이스가 정의됩니다.
- 비동기 IO 작업을 시작하려면
aio_read
또는aio_write
를 사용하고, 실행 중인 IO의 상태를 확인하려면aio_error
를 사용하세요. 작업.현재 Linux에서 AIO의 커널 구현은 파일 IO에만 효과적입니다. 실제 AIO를 구현하려면 직접 구현해야 합니다.
현재 libevent, libev, libuv 등 많은 오픈 소스 비동기 IO 라이브러리가 있습니다.
- 비동기 IO 작업을 시작하려면
위 내용은 리눅스 io는 무슨 뜻인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Linux 운영 체제의 5 가지 핵심 구성 요소는 다음과 같습니다. 1. 커널, 2. 시스템 라이브러리, 3. 시스템 도구, 4. 시스템 서비스, 5. 파일 시스템. 이러한 구성 요소는 함께 작동하여 시스템의 안정적이고 효율적인 운영을 보장하고 강력하고 유연한 운영 체제를 형성합니다.

Linux의 5 가지 핵심 요소는 다음과 같습니다. 1. Kernel, 2. 명령 줄 인터페이스, 3. 파일 시스템, 4. 패키지 관리, 5. 커뮤니티 및 오픈 소스. 이러한 요소는 함께 Linux의 특성과 기능을 정의합니다.

Linux 사용자 관리 및 보안은 다음 단계를 통해 달성 할 수 있습니다. 1. SudouserAdd-m-gdevelopers-s/bin/bashjohn과 같은 명령을 사용하여 사용자 및 그룹을 만듭니다. 2. for loop 및 chpasswd 명령을 사용하여 대량 사용자를 생성하고 비밀번호 정책을 설정합니다. 3. 일반적인 오류, 홈 디렉토리 및 쉘 설정을 확인하고 수정하십시오. 4. 강력한 암호화 정책, 정기 감사 및 최소 기관의 원칙과 같은 모범 사례를 구현하십시오. 5. 성능을 최적화하고 Sudo를 사용하고 PAM 모듈 구성을 조정하십시오. 이러한 방법을 통해 사용자를 효과적으로 관리하고 시스템 보안을 개선 할 수 있습니다.

Linux 파일 시스템 및 프로세스 관리의 핵심 작업에는 파일 시스템 관리 및 프로세스 제어가 포함됩니다. 1) 파일 시스템 작업에는 MKDIR, RMDIR, CP 및 MV와 같은 명령을 사용하여 파일 또는 디렉토리 작성, 삭제, 복사 및 이동이 포함됩니다. 2) 프로세스 관리에는 ./my_script.sh&, top and kill과 같은 명령을 사용하여 프로세스를 시작, 모니터링 및 킬링하는 것이 포함됩니다.

Shell Scripts는 Linux 시스템에서 명령을 자동화하기위한 강력한 도구입니다. 1) 쉘 스크립트는 통역사를 통해 라인별로 명령을 실행하여 변수 대체 및 조건부 판단을 처리합니다. 2) 기본 사용법에는 TAR 명령을 사용하여 디렉토리를 백업하는 것과 같은 백업 작업이 포함됩니다. 3) 고급 사용에는 서비스를 관리하기 위해 기능 및 사례 명세서를 사용하는 것이 포함됩니다. 4) 디버깅 기술에는 SET-X를 사용하여 명령이 실패 할 때 디버깅 모드 및 SET-E가 종료 할 수 있습니다. 5) 서브 쉘, 배열 사용 및 최적화 루프를 피하기 위해 성능 최적화가 권장됩니다.

Linux는 단순성, 모듈성 및 개방성을 강조하는 Unix 기반의 멀티 태스킹 운영 시스템입니다. 핵심 기능에는 다음이 포함됩니다. 파일 시스템 : 트리 구조로 구성되고 Ext4, XFS, BTRFS와 같은 여러 파일 시스템을 지원하고 DF-T를 사용하여 파일 시스템 유형을 봅니다. 프로세스 관리 : PS 명령을 통해 프로세스를보고 우선 순위 설정 및 신호 처리가 포함 된 PID를 사용하여 프로세스를 관리합니다. 네트워크 구성 : IP 주소의 유연한 설정 및 네트워크 서비스 관리 및 sudoipaddradd를 사용하여 IP를 구성합니다. 이러한 기능은 기본 명령 및 고급 스크립트 자동화를 통해 실제 작업에 적용되어 효율성을 향상시키고 오류를 줄입니다.

Linux 유지 관리 모드를 입력하는 방법에는 다음이 포함됩니다. 1. Grub 구성 파일 편집, "단일"또는 "1"매개 변수를 추가하고 Grub 구성을 업데이트합니다. 2. 그루브 메뉴에서 시작 매개 변수를 편집하고 "단일"또는 "1"을 추가하십시오. 종료 유지 보수 모드는 시스템을 다시 시작하면됩니다. 이 단계를 사용하면 필요할 때 유지 보수 모드를 신속하게 입력하고 안전하게 종료하여 시스템 안정성과 보안을 보장 할 수 있습니다.

Linux의 핵심 구성 요소에는 커널, 쉘, 파일 시스템, 프로세스 관리 및 메모리 관리가 포함됩니다. 1) 커널 관리 시스템 리소스, 2) Shell은 사용자 상호 작용 인터페이스를 제공합니다. 3) 파일 시스템은 여러 형식, 4) 프로세스 관리는 Fork 및 5) 메모리 관리를 통해 가상 메모리 기술을 사용하여 구현됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구